Что такое «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
», что является минимумом, необходимым для соответствия шаблону.