Функции PHP чувствительны к регистру? - PullRequest
96 голосов
/ 13 апреля 2011

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

Ответы [ 8 ]

96 голосов
/ 13 апреля 2011

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

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

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

32 голосов
/ 13 апреля 2011

Нет.

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

18 голосов
/ 14 июня 2013

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 и подобные.

7 голосов
/ 13 апреля 2011

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

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

3 голосов
/ 26 августа 2015

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

Пример:

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

Выход:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3
2 голосов
/ 10 декабря 2012

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

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

вывод:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6
1 голос
/ 29 августа 2013

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

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

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

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

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

0 голосов
/ 13 июля 2015

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

Все уже знают здесь: движок PHP не заботится о регистре букв.

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

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

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

$ контроллер и $действие берется из URL как есть.

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

, пока классnamed myPartnerController ...

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

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

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...