考虑以下代码:
<?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-语句后面的内容(例如,那里可能有一个函数,您将从脚本的另一部分调用(,它必须解析每一行。因此,解析错误还不关心执行逻辑。