代码之家  ›  专栏  ›  技术社区  ›  PHPFan

为什么在双引号字符串中使用一个数组表示法而不是使用另一个时会引发解析错误?

  •  -1
  • PHPFan  · 技术社区  · 8 年前

    考虑以下代码:

    <?php
       $arr = array('fruit' => 'apple', 'veggie' => 'carrot');
    
       define('fruit', 'veggie');
    
       print "Hello {$arr['fruit']}"; //This works
    
       print "Hello $arr['fruit']"; //This doesn't work
     ?>
    

    我无法理解为什么第二个无法工作,并给出如下解析错误:

    **Parse error:** syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
    

    同样,如果我写上面的程序如下,这是如果我添加模具;在第一个执行行之后,然后将非工作行静止,我得到了相同的错误。

     <?php
       $arr = array('fruit' => 'apple', 'veggie' => 'carrot');
    
       define('fruit', 'veggie');
    
       print "Hello {$arr['fruit']}";
       die;
       print "Hello $arr['fruit']";
     ?>
    

    我一点也不明白。它应该打印出第一行,因为我正在死后的代码。编译时不应该考虑死后的一行,但它正在考虑并禁止执行第一行。

    1 回复  |  直到 8 年前
        1
  •  1
  •   vrijdenker    8 年前

    解析错误是由于在双引号字符串中解析变量的方式造成的。 你应该读一下 here .

    在第二个示例中,PHP解释 $arr 作为一个字符串,括号在其上执行子字符串类型的操作。在这种情况下,单引号不应该存在,从而导致分析错误。

    这就引出了你的第二个问题: PHP尝试解析您的PHP文件时发生解析错误。由于PHP尚不知道die语句后面是什么(例如,可能有一个函数,您将从脚本的另一部分调用),因此它必须解析每一行。因此,解析错误还不关心执行逻辑。