Я копал какой-то код, и я нашел несколько вызовов 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 чувствительны к регистру.
Да, я всегда использую все имена в коде, как было объявлено. Но я молюсь, чтобы они никогда не делали имена функций и классов чувствительными к регистру.
Спасибо!