为什么在字符串中嵌入函数与变量不同



我以前问过这样的问题,但这次不同,这更多的是关于解析逻辑。

我之前的问题是关于如何在字符串中嵌入函数(双引号),我得到了这个答案:

$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支持对象和数组表达式的副产品

相关内容

  • 没有找到相关文章

最新更新