У меня два класса в моей системе. Один называется файлом, а второй – файлом. На моем 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).