2015-10-22 1 views
17

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

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

Почему PHP частично case senstive?

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

ответ

3

Чувствительный

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

регистронезависимы

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

+1

Да, но _why_? – Manngo

24

Чувствительный (как определяется пользователем и РНР определены)

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

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

  • функции
  • класса конструкторы
  • методы класса
  • ключевые слова и конструкции (если, в противном случае, нулевой Еогеасп, эхо и т.д.)

В php.net

Основы

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

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


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

  1. Userland Naming Guide
  2. Why are functions and methods in PHP case-insensitive?
  3. Are PHP functions case sensitive?
  4. Are PHP keywords case-sensitive?
  5. Is PHP function names case-sensitive or not?
  6. Source of PHP Case Sensitive
+0

Извините, но мне просто нужно прокомментировать, что это никоим образом не отвечает на вопрос. Я не спрашивал, как создавать переменные, или _which_ имена чувствительны к регистру. Я спросил _why_? – Manngo

+1

Интересно, почему всегда есть кто-то, кто быстро скопирует часть какой-то инструкции без фактического чтения всего OP ...: - \ Это не ответ вообще! Мой ответ будет состоять в том, что это происходит только потому, что PHP был сделан другими разработчиками, и они просто неправильно обменивались данными, что вызывало эту путаницу. Мой вопрос: как я могу отключить это странное поведение? Я нахожу регистр чувствительности в именах переменных так же, как огромную возможность для различных трудно найти ошибки и ошибки. Нет никакой другой ценности в этом подходе, извините ... – McVitas

0

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

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

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

+1

Я не думаю, что это правильно. В MySQL верно, что чувствительность к регистру таблиц и столбцов зависит от базовой операционной системы, но не от самого PHP. – Manngo

+0

@Manngo создайте файл в локальной среде, имя файла которого «database.php», и включите его из любого скрипта PHP, например 'require 'Database.php'' на локальном сервере Wamp, и он будет работать, а linux не будет работать. – Butterfly

+0

Да, но это не PHP. Само имя файла также будет зависеть от операционной системы. – Manngo

1

Почему PHP частично относится к senstive?

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

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

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

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

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

+0

Знаете, я никогда не замечал дополнительный необязательный параметр в функции 'define'. – Manngo