Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 и имена функций чувствительны к регистру.

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

Спасибо!