Я копал код, и я нашел несколько вызовов mySQL_fetch_array
. Учитывается ли PHP регистр имен функций? Я помню, как читал это где-то, но, похоже, не нашел ссылки на него.
Являются ли функции PHP чувствительными к регистру?
Ответ 1
Я цитирую this:
Примечание: имена функций без учета регистра, хотя обычно хорошая форма для вызова функций, поскольку они появляются в их объявлении.
Таким образом, его внешний вид, как пользовательские функции, не чувствителен к регистру, был vote для создания функций/объектов в PHP5 case- чувствительным.
Ответ 2
Нет
Функции PHP не чувствительны к регистру.
Ответ 3
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
и т.д.
Ответ 4
Нет, они не чувствительны к регистру, однако вы всегда должны использовать случай, который находится в руководстве, для согласованности.
Однако переменные чувствительны к регистру.
Ответ 5
В 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
Ответ 6
И имена методов также нечувствительны к регистру. например: -
<?php
class C {
public function method() { }
public function METHOD() { }
}
выход:
PHP Fatal error: Cannot redeclare C::METHOD() in ....php on line 6
Ответ 7
В заключение каждого ответа. Несмотря на то, что PHP не требует согласования последовательности символов во всех экземплярах даже до сих пор в PHP5.
Лучшая практика будет
всегда используют те же случаи, когда ссылаются на любые переменные (их "обязательные" ) или функции (его "необязательно, но рекомендуется" ).
Вы никогда не знаете, может быть, когда-нибудь пройдут голосование, и вы спасете весь кошмар с меняющимися случаями в своих приложениях, сделанных пару лет назад, которые требуют обновления в PHP.
Надеюсь, что это поможет в любом случае.
Ответ 8
Может быть, это слишком поздно, но...
Все уже знают здесь: PHP-движок не заботится о случае букв.
И есть голосование по PHP bugtracker, где большинство говорит: "Да, я прочувствую чувствительность к делу".
Но я против, потому что в моей MVC-структуре я вызываю действие контроллера:
$currentController = new $controller($parameters);
$currentAction = $currentController->{$action}();
$controller и $action берутся из URL как есть.
Подумайте, если пользователь опубликовал ссылку на мой сайт: https://my-site/MyPartnerController/MyPartnerGallery
тогда как класс называется myPartnerController...
Это означает, что никто никогда не получает эту страницу, если имена классов PHP и имена функций чувствительны к регистру.
Да, я всегда использую все имена в коде, как было объявлено. Но я молюсь, чтобы они никогда не делали имена функций и классов чувствительными к регистру.
Спасибо!