«Грязный токен-анализ» в PHP

Что такое «Greedy token parsing» в PHP? Я нашел это в руководстве Codeigniter:

«Всегда используйте одиночные кавычки, если вам не нужны анализируемые переменные, а в тех случаях, когда вам нужны анализируемые переменные, используйте фигурные скобки для предотвращения жадного анализа партитур ».

«Моя строка {$ foo}"

Ответ с хорошим объяснением поможет.

Благодаря !!

Жадный анализ парсера относится к чему-то вроде этого:

$fruit = "apple"; $amount = 3; $string = "I have $amount $fruits"; 

Возможный ожидаемый результат: «У меня 3 яблока»
Фактический результат: «У меня 3»

Конечно, это ошибка начинающих, но даже эксперты иногда делают ошибки!

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

 $string = "I have ".$amount." ".$fruit."s"; 

Обратите внимание, что в редакторах кода есть более легкая цветовая кодировка задания этой строки, как показано здесь в Notepad ++:

Скриншот

Опять же, некоторые люди предпочли бы, чтобы двигатель выполнял интерполяцию:

 $string = sprintf("I have %d %ss",$amount,$fruit); 

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

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

Разница в переменной интерполяции есть, например:

 $foo = 'bar'; echo "$foos"; 

Парсер здесь будет с жадностью анализировать, насколько это имеет смысл, и попытаться интерполировать переменную « $foos » вместо фактически существующей переменной « $foo ».

Другой пример в регулярных выражениях:

 preg_match('/.+\s/', 'foo bar baz') 

Это жадно захватывает « foo bar », потому что это самая длинная строка, которая соответствует шаблону .+\s С другой стороны:

 preg_match('/.+?\s/', 'foo bar baz') 

Это неровный +? только захватывает « foo », что является минимумом, необходимым для соответствия шаблону.