Заглавные буквы в имени класса PHP

У меня два класса в моей системе. Один называется файлом, а второй – файлом. На моем localhost, когда я создаю файл, я получаю файловый объект, но мой друг, запускающий тот же скрипт, получает объект File, так как заглавные буквы были непризнанными, а «файл» был равен «Файл». Это какая-то конфигурируемая вещь? Мы оба работаем в Windows. У меня есть WampServer, у него есть XAMPP.

PHP не учитывает регистр для имен классов. это означает, что вы обычно можете делать $file = new file() даже если класс называется File и наоборот.

Вы случайно полагаетесь на автоматическую загрузку файлов классов? Если это так, возможно, что в зависимости от компьютера интерпретатор не всегда находит тот же самый файл первым. Это объяснит проблему.

Я настоятельно рекомендую вам переименовать свои классы. Это всегда плохая идея полагаться на случай, чтобы различать две разные вещи, и по соглашению имена классов всегда начинаются с заглавной буквы.

Если вы не можете изменить имена классов, я предлагаю взглянуть на пространства имен php .

Classnames в PHP не чувствительны к регистру (это не зависит от операционной системы)

 class myclass {} $x = new MYclaSS; var_dump($x); object(myclass)#1 (0) { } 

так как общий совет: вы не должны начинать и пытаться что-то смешать 🙂

Такой код не должен работать:

 class ab {} class AB {} Fatal error: Cannot redeclare class AB in ... on line x 

Я предполагаю, что вы используете какую-то ленивую загрузку для файлов классов, возможно, вы программируете в рамках PHP. Секрет будет лежать в вашей функции __autoload . Найди это.

Проверьте руководство по загрузке PHP для автозагрузки .

Следующий код:

 <?php class file { public $a; } class File { public $a2; } $x = new file(); 

Выдает сообщение об ошибке: Cannot redeclare class File , трюк может заключаться в том, какой файл включен .

Поведение вашего кода показывает, что один из классов не загружается (в противном случае вы увидите ошибку класса redeclare ). Вероятно, это автоматический загрузчик, который сначала загружает класс file а затем, когда находит определение в File он просто предполагает, что он уже загрузил класс (из-за нечувствительности к регистру поведения PHP).