PHP и чувствительность к регистру

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

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

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

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

Обновить

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

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

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

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

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

Замечания:

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

Ответы

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

В php.net

Основы

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

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


Некоторые полезные ссылки

Ответ 3

Чувствительность к регистру

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

Нечувствительность к регистру

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

Ответ 4

Для имен файлов:

Обратите внимание, что чувствительность к регистру также зависит от вашей среды.

Когда вы что-то создаете на своих WAMP или XAMPP, он будет нечувствителен к регистру, когда вы перейдете на сервер Linux, он будет вызывать ошибку.

Ответ 5

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

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