之前我问过这样的问题,但这个问题不同,这更多的是解析逻辑。
我以前的问题是关于如何在字符串中嵌入一个函数(双引号),我收到了这个答案:
$date = "date";
echo "This page is under construction<br/><br/>Current Date: {$date('l jS \of F Y')}";
之后我开始想知道为什么下面这个没有工作,而上面的那个工作正常:
echo "This page is under construction<br/><br/>Current Date: {date('l jS \of F Y')}";
即使变量在字符串内部工作得很好,解析过程背后的逻辑如何。
我读过PHP解析器$
后,它会尝试找到适当的变量进行解析和运行,并且还要分隔变量名,我们也使用花括号{}
,这也是我理解的东西相当。
但是为什么在为函数开发解析器引擎时似乎需要这种语法,因为起初它对我没有任何意义。
基本上,为什么我需要定义一个包含函数名称的字符串表示的变量,如下所示:
$date = "date";
提前致谢。
答案 0 :(得分:4)
注意:
函数,方法调用,静态类 变量和里面的类常量 {$}自PHP 5以来的工作。但是, 访问的值将被解释为 范围中变量的名称 哪个字符串是定义的。运用 单花括号({})不起作用 用于访问的返回值 功能或方法或的价值 类常量或静态类 变量
虽然这是一个黑客攻击:
function _expression($x) { return $x; }
$e = '_expression';
echo "This page is under construction<br/><br/>Current Date: {$e(date('l jS \of F Y'))}";
答案 1 :(得分:2)
原因很简单。双引号中任何复杂解析的语法都是 {$
。没有其他字节序列会在PHP中触发此行为。该语法标记称为T_CURLY_OPEN
。
并且您可以使用函数,只有PHP的副产品支持对象和数组表达式。