TL; DR: имена классов нечувствительны к регистру, но всегда используют тот же регистр, что и в объявлении (как и в функциях). Кроме того, создание экземпляров классов с другим регистром, как они были определены, может вызвать проблемы с автозагрузчиками.
Кроме того, имена классов не чувствительны к регистру:
<?php
class SomeThing {
public $x = 'foo';
}
$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);
Это выводит:
class SomeThing#1 (1) {
public $x =>
string(3) "foo"
}
class SomeThing#2 (1) {
public $x =>
string(3) "foo"
}
class SomeThing#3 (1) {
public $x =>
string(3) "foo"
}
Проблема заключается в использовании автозагрузчиков и чувствительных к регистру файловых систем (например, ext2 / 3/4), в которых вы должны вызывать имя класса с тем же регистром, в котором указан файл, содержащий класс (а не как имя класса на самом деле ) или используйте strtolower
:
Файл класса:
<?php
// filename something.php
class SomeThing {
...
}
Функция автозагрузчика (__autoload
или функция для регистрации на spl_autoload_register
)
function my_autloader($className) {
$filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
if (file_exists($filename)) {
require($filename);
}
}
Теперь с этим кодом:
$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work
Вы можете выполнить эту работу (т. Е. Имея фактически нечувствительные к регистру имена классов с помощью автозагрузчика), если вы добавили вызов к strtolower()
в коде автозагрузчика, но, как и в случае с функциями, просто лучше ссылаться на класс в том же как это объявлено, имя файла должно совпадать с именем класса, использовать автозагрузчики и забыть использовать strtolower
и подобные.