PHP & amp; Чувствительность к регистру

В PHP имена переменных и констант чувствительны к регистру, а имена функций — нет.

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

Почему PHP частично дело чувствительное?

Обратите внимание, что я не спрашиваю который имена чувствительны к регистру, но Зачем.

Обновить

Я думал, что мог бы добавить, в пользу тех, кто думает, что я спрашиваю который, следующий список:

С учетом регистра

  • Струны
  • переменные
  • Свойства объекта
  • Константы, по умолчанию

Без учета регистра

  • Ключевые слова и т. Д.
  • функции
  • Методы объекта
  • Константы, если определены соответственно

Замечания:

  • Классы, таким образом, представляют собой смешанную сумку:
    • class Ключевое слово нечувствительно к регистру
    • Методы класса, будучи функциями, нечувствительны к регистру
    • Свойства класса, являющиеся переменными & константы, чувствительны к регистру
  • Поскольку строки чувствительны к регистру, все, что зависит от строк, например ключи массива и значения, также учитывает регистр

30

Решение

Почему PHP частично чувствителен к регистру?

Я могу только предположить, что это связано с очень ранними версиями, вероятно, PHP / FI 2.0. руководство прямо заявляет:

Помните, что имена функций PHP / FI не чувствительны к регистру.

Большая часть пользовательского ввода, такого как параметры GET и POST, всегда была зарегистрирована как глобальные переменные. Отношение к ним как к нечувствительному к регистру, вероятно, вызвало бы проблемы, и поэтому предположительно поэтому все переменные рассматривались как чувствительные к регистру.

Из того, что я могу сказать, это были единственные идентификаторы в PHP / FI 2.0. Все остальные были введены позже, по-видимому, имитируя имена функций без учета регистра.

Особые константы были введены только в PHP 4 ( Руководство по PHP 3 упоминает «константы», но в настоящее время их называют «литералами»). По какой-то таинственной причине (возможно, консенсус не был найден) было решено разрешить использование постоянных идентификаторов. define()d либо чувствителен к регистру, либо нечувствителен к диссонансу разработчиков. Интересно, а пока define() по умолчанию учитывает регистрозависимые константы, соответствующие аналоги C (REGISTER_*_CONSTANT) по умолчанию без учета регистра.

5

Другие решения

С учетом регистра (определяется как пользователем, так и PHP)

  • переменные
  • константы
  • ключи массива
  • свойства класса
  • константы класса

Без учета регистра (определяется как пользователем, так и PHP)

  • функции
  • конструкторы классов
  • методы класса
  • ключевые слова и конструкции (if, else, null, foreach, echo и т. д.)

В php.net

основы

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

Имена переменных следуют тем же правилам, что и другие метки в PHP. Допустимое имя переменной начинается с буквы или подчеркивания, за которым следует любое количество букв, цифр или подчеркивания. Как регулярное выражение, это будет выражаться так: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'


Несколько полезных ссылок

  1. Userland Naming Guide
  2. Почему функции и методы в PHP не чувствительны к регистру?
  3. Являются ли функции PHP чувствительными к регистру?
  4. Являются ли ключевые слова PHP чувствительными к регистру?
  5. В именах функций PHP учитывается регистр или нет?
  6. Источник PHP с учетом регистра
31

С учетом регистра

переменные, константы, ключи массива, свойства класса, константы класса

Без учета регистра

функции, конструкторы классов, методы классов, ключевые слова и конструкции
(если, иначе, null, foreach, echo и т. д.)

2

Имена классов также нечувствительны к регистру, как я только что заметил в каком-то работающем устаревшем коде.

Это поведение также сообщается здесь: Заглавные буквы в имени класса PHP

-1
По вопросам рекламы [email protected]