-1

考虑下面的代码:

<?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 后面的行,但它正在考虑并禁止执行第一行。

为什么这样?

4

1 回答 1

1

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

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

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

于 2017-11-19T09:43:58.843 回答