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



考虑以下代码:

<?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)

另外,如果我在上面编写如下程序,那就是如果我添加 die; 在第一个执行行之后,然后放置非工作行,我仍然得到同样的错误。

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

我完全没有得到这个。它应该打印第一行,因为我正在处理它之后的代码,编译时不应该考虑 die 后面的行,但它正在考虑并禁止第一行执行。

为什么会这样?

解析错误是由于在双引号字符串中解析变量的方式造成的。你应该在这里阅读。

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

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

相关内容

  • 没有找到相关文章

最新更新