什么是PHP中的“贪婪令牌解析”?我在Codeigniter指南中发现了这一点:
“除非需要解析变量,否则始终使用单引号字符串,在需要解析变量的情况下,使用大括号防止贪婪令牌解析。”
“我的字符串{$foo}”
有很好的解释的答案会有帮助。
谢谢!!
发布于 2013-10-16 13:41:09
贪婪的令牌解析指的是这样的内容:
$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);这完全取决于个人的喜好,但在你引用的指导方针中,重点是要小心你正在写的东西。
发布于 2013-10-16 13:45:48
“贪婪”是语法分析中的一个通用术语,指的是“尽可能多地得到”。相反的可能是“不贪婪”或“只得到你所需要的”。
例如,变量插值的不同之处是:
$foo = 'bar';
echo "$foos";这里的解析器将贪婪地解析所有有意义的内容,并尝试插入变量"$foos",而不是实际存在的变量"$foo“。
正则表达式中的另一个示例:
preg_match('/.+\s/', 'foo bar baz')这个词贪婪地抓住了"foo bar",因为它是符合.+\s模式的最长字符串。另一方面:
preg_match('/.+?\s/', 'foo bar baz')这个不贪婪的+?只抓取"foo",这是匹配模式所需的最小值。
https://stackoverflow.com/questions/19404988
复制相似问题