Чувствительны ли функции PHP к регистру?



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

607   8  

8 ответов:

я цитирую из этой:

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

Итак, похоже, что пользовательские функции не чувствительны к регистру, был голосование для создания функций / объектов с учетом регистра 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), в которых вы должны вызвать имя класса с помощью в том же случае файл, содержащий класс, называется (не так, как имя класса на самом деле 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

    Ничего не найдено.