У меня есть два класса в моей системе. Один называется файлом, а второй - файлом. На моем localhost, когда я создаю файл, я получаю файл-объект, но мой друг, который запускает тот же script, получает объект File, так как заглавные буквы были нераспознаны, а "файл" был равен "Файл". Это какая-то конфигурируемая вещь? Мы оба работаем в Windows. У меня есть WampServer, у него XAMPP.
Заглавные буквы в имени класса PHP
Ответ 1
PHP нечувствителен к регистру для имен классов. это означает, что вы обычно можете делать $file = new file()
, даже если класс называется File
и наоборот.
Вы случайно полагаетесь на автоматическую загрузку файлов классов? Если это так, возможно, что в зависимости от компьютера интерпретатор не всегда находит тот же самый файл первым. Это объяснит проблему.
Я настоятельно рекомендую вам переименовать свои классы. Всегда плохая идея полагаться на случай, чтобы различать две разные вещи, и по соглашению имена классов всегда начинаются с заглавной буквы.
Если вы не можете изменить имена классов, я предлагаю посмотреть пространства имен php.
Ответ 2
Классные имена в 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
Ответ 3
Я предполагаю, что вы используете какую-то ленивую загрузку для файлов классов, возможно, вы программируете в фреймворке. Секрет будет лежать в вашей функции __autoload
. Найдите его.
Отметьте Руководство по автоматической загрузке PHP.
Следующий код:
<?php
class file {
public $a;
}
class File {
public $a2;
}
$x = new file();
Дает ошибку: Cannot redeclare class File
так что опять-таки, трюк может быть в том, какой файл включен.
Поведение вашего кода показывает, что один из классов не загружается (в противном случае вы увидите ошибку класса redeclare). Вероятно, это автоматический загрузчик, который сначала загружает класс file
, а затем, когда находит определение в file
, он просто предполагает, что он уже загрузил класс (из-за нечувствительности к регистру поведения PHP).