我以前问过这样的问题,但这次不同,这更多的是关于解析逻辑。
我之前的问题是关于如何在字符串中嵌入函数(双引号),我得到了这个答案:
$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";
提前谢谢。
来自文档:
注:
函数、方法调用、静态类内部的变量和类常量{$}从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'))}";
{$
。在PHP中,没有其他字节序列会触发这种行为。该语法标记被称为T_CURLY_OPEN
。
您可以将函数与之一起使用,这只是PHP支持对象和数组表达式的副产品。