У меня есть два класса в моей системе. Один называется файлом, а второй — файлом. На моем локальном хосте, когда я создаю файл, я получаю объект файла, но мой друг, запускающий тот же скрипт, получает объект файла, как будто заглавные буквы не были распознаны, а «файл» был равен «файлу». Это что-то настраиваемое? Мы оба работаем на Windows. У меня WampServer, у него XAMPP.
Заглавные буквы в имени класса PHP
Ответы (3)
PHP нечувствителен к регистру для именования классов. это означает, что обычно вы можете выполнять $file = new file()
, даже если класс называется File
, и наоборот.
Вы случайно не полагаетесь на автоматическую загрузку файлов классов? Если это так, возможно, в зависимости от компьютера интерпретатор не всегда сначала находит один и тот же файл. Это объяснит проблему.
Я настоятельно рекомендую вам переименовать ваши классы. Всегда плохая идея полагаться на регистр, чтобы различать две разные вещи, и по соглашению имена классов всегда начинаются с заглавной буквы.
Если вы не можете изменить имена классов, я предлагаю взглянуть на пространства имен php.
Имена классов в 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
, так что опять же, проблема может заключаться в том, какой файл включен.
Поведение вашего кода показывает, что один из классов не загружается (в противном случае вы увидите ошибку повторного объявления класса). Вероятно, это автозагрузчик, который сначала загружает класс file
, а затем, когда он находит определение для File
, он просто предполагает, что он уже загрузил класс (из-за нечувствительного к регистру поведения PHP).