【问题标题】:Why embedding functions inside of strings is different than variables为什么在字符串中嵌入函数与变量不同
【发布时间】:2011-06-02 20:26:00
【问题描述】:

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

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

$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 php-parser


    【解决方案1】:

    From the documentation:

    注意:

    函数、方法调用、静态类 里面的变量和类常量 {$} 从 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'))}";
    

    【讨论】:

      【解决方案2】:

      原因很简单。发生在双引号中的任何复杂解析的语法是 {$。在 PHP 中没有其他字节序列会触发此行为。该语法标记被称为T_CURLY_OPEN

      你可以使用函数,这只是 PHP 的一个副产品,它支持对象和数组表达式。

      【讨论】:

        猜你喜欢
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 2019-06-05
        • 2013-10-30
        • 2021-12-22
        • 2019-03-23
        • 1970-01-01
        相关资源
        最近更新 更多