Неограниченный знак доллара не выдает ошибку;PHP обрабатывает крайний случай? - PullRequest
2 голосов
/ 15 января 2012

Я столкнулся с тем, что выглядит как странный крайний случай с процессором PHP. Согласно инструкции PHP:

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

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

Случай с краем, который я видел, это тот случай, когда символ сразу после знака доллара не является буквой или подчеркиванием (или какой-либо другой комбинацией метасимволов, которая вызовет особое значение, например второй знак доллара). Вот пример:

$someVariable = "This is a $(test of our edge case).";

Я могу вывести эту переменную с помощью оператора echo, и знак доллара перед словом test отображается без проблем (не нужно было бежать). Насколько я могу судить, PHP не выдает никаких ошибок или предупреждений. Итак, теперь на мой вопрос: это крайний случай в грамматике процессора? Это ошибка? Или это какая-то другая интерпретация, которую я упускаю из виду?

Мне хорошо известно, что в качестве хорошей практики программирования всегда следует избегать знака доллара в строке в двойных кавычках, когда нужно напечатать указанный символ (или можно просто использовать строку в одинарных кавычках). Мне было просто любопытно, почему этот случай не обязательно требует побега до знака доллара.

1 Ответ

3 голосов
/ 15 января 2012

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

Если вы знакомы с регулярными выражениями, вы можете подумать, что PHP сопоставляет содержимое строк в двойных кавычках со следующим выражением:

\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
...