2

これが私のクラススクリプトです:

class.php

<?php
class testing {

    function hurray () {
        echo "Works.";
    }
}

そして、私の呼び出しスクリプトは次のとおりです。

test.php

<?php
include_once "class.php";
include_once "claSs.php";

$a = new testing();
$a->hurray();

test.php を実行しようとすると

php test.php

以下のエラーが表示されます。

PHP 致命的なエラー: 行 2 の /private/var/www/temp/ClaSs.php でクラス テストを再宣言できません

*Nix OS は、大文字と小文字を区別しないファイル システムをサポートしています。つまり、ファイル名の参照に使用される大文字と小文字を区別します。上記のスクリプトは、ケースが変更された同じファイルをロードしていると言いましたが、Mac または PHP はそれを別のファイルと見なし、ランタイムにロードすると、上記のエラーが発生します。

私の質問:

  1. Mac OS X はそれを 2 つの異なるファイルと認識しますか?
  2. PHPは2つの異なるファイルだと思いますか? Windowsで上記のテストを試してみたところ、魅力的に機能したので疑問です。
  3. 私の理解は間違っていますか?
  4. 何百ものレガシーファイルを変更することはないので、この問題を解決する最善の方法は何ですか?

追加情報:

私の Mac OS X は、このリンクに従って Mac OS 拡張 (ジャーナリング) で構築されています。

File System Personality:  Journaled HFS+
Type (Bundle):            hfs
Name (User Visible):      Mac OS Extended (Journaled)
4

3 に答える 3

0

私自身の質問に答えるには:

  1. Mac OS X はそれを 2 つの異なるファイルと認識しますか?

    はい。Mac は大文字と小文字を区別しないように構成されていますが、大文字と小文字が区別されません。そのため、同じファイルに 2 つのインクルードがあり、大文字と小文字が混在している場合、それらが異なるファイルであるかのように大文字と小文字を区別してファイルが提供されます。これにより、PHP は両方のファイルをロードし、 2 番目のインクルードはクラス衝突になります。

  2. PHPは2つの異なるファイルだと思いますか? Windowsで上記のテストを試してみたところ、魅力的に機能したので疑問です。

    #1の回答を読んでください。

  3. 私の理解は間違っていますか?

    私の理解は正しいですが、ケースは保持されます。

  4. 何百ものレガシーファイルを変更することはないので、この問題を解決する最善の方法は何ですか?

    このようなエラーを回避するには、同じファイルが異なるケースで読み込まれないようにする必要があります。

于 2013-07-15T07:56:28.423 に答える