Являются ли функции PHP чувствительными к регистру?

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

Я цитирую из этого :

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

Таким образом, его внешний вид, как пользовательские функции, не чувствителен к регистру, было голосование за создание функций / объектов в PHP5 с учетом регистра.

Нет .

Функции PHP не чувствительны к регистру.

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 и strtolower

Нет, они не чувствительны к регистру, однако вы всегда должны использовать случай, который находится в руководстве, для согласованности.

Однако переменные чувствительны к регистру.

В PHP переменные чувствительны к регистру, но функции не имеют таких проблем. Вы можете использовать следующие инструкции для вывода вывода, все отобразит тот же результат.

 <?php Echo "This is a test script"; ECHO "This is a test script"; echo "This is a test script"; ?> 

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

Пример:

 <?php $a=5; echo $A;// It will show the error. ?> 

Вывод:

 Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3 

И имена методов также нечувствительны к регистру. например:-

 <?php class C { public function method() { } public function METHOD() { } } 

вывод:

 PHP Fatal error: Cannot redeclare C::METHOD() in ....php on line 6 

В заключение ответ каждого. Несмотря на то, что PHP не требует согласования случайных символов во всех случаях, даже до сих пор в PHP5.

Лучшей практикой будет

всегда используют те же случаи, когда ссылаются на любые переменные (его «обязательные») или функции (его «необязательно, но рекомендуется»).

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

Надеюсь, что это поможет.

Может быть, это слишком поздно, но …

Все уже знают здесь: PHP-движок не заботится о случае с буквами.

И есть голосование по PHP bugtracker, где большинство говорит: «Да, я профессионал в отношении чувств».

Но я против, потому что в моей MVC-структуре я вызываю действие контроллера:

  $currentController = new $controller($parameters); $currentAction = $currentController->{$action}(); 

$ controller и $ action взяты из URL как есть.

Подумайте, если пользователь опубликовал ссылку на мой сайт: https: // my-site / MyPartnerController / MyPartnerGallery

а класс называется myPartnerController …

Это означает, что никто никогда не получает эту страницу, если имена классов и функций PHP чувствительны к регистру.

Да, я всегда использую все имена в коде, как было объявлено. Но я молюсь, чтобы они никогда не делали имена функций и классов чувствительными к регистру.

Спасибо!