8 ответов:
я цитирую из этой:
Примечание: имена функций регистр не чувствителен, хотя это обычно хорошая форма для вызова функций, как они появляются в их декларации.
Итак, похоже, что пользовательские функции не чувствительны к регистру, был голосование для создания функций / объектов с учетом регистра PHP5.
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), в которых вы должны вызвать имя класса с помощью в том же случае файл, содержащий класс, называется (не так, как имя класса на самом деле cased), или используйте
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и любит.
нет, они не регистр чувствителен, однако, вы всегда должны использовать регистр, который находится в руководстве, для согласованности.
переменные are регистр.
в 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, где большинство говорит: "Да, я про case sensetivity".
но я против, потому что в моей структуре MVC я называю действие контроллера:
$currentController = new $controller($parameters); $currentAction = $currentController->{$action}();$ controller и $action берутся из URL как есть.
думаю, если пользователь публикует ссылку на мой сайт: https://my-site/MyPartnerController/MyPartnerGallery
в то время как класс называется myPartnerController...
это означает, что никто никогда не получает эту страницу, если имена классов и функций PHP чувствительны к регистру.
Да, я всегда использую все имена в коде, как заявлено. Но я молюсь, чтобы они никогда не сделать имена функций и классов чувствительны.
спасибо!
Comments