7

如果 PHP 是解释性语言(每行都在到达时执行),如果错误发生在从未执行的函数内部,它怎么会抛出错误?

或者我可能不明白解释的意思?

例如

<?php 

$number = 1;

function square(){

 $foo = 1  //missing semicolon, throws error

}
echo $number;

?>
4

3 回答 3

7

因为在 PHP 解释器开始之前,首先解析它的语法以尝试对其进行标记。

于 2011-05-31T05:37:01.700 回答
4

在 PHP 实际解释页面之前,它会通过预处理器运行。这会在页面实际开始运行之前发现页面中的任何错误,并执行一大堆其他操作来准备脚本以进行解释。

这可以确保脚本语法在任何事情发生之前都是正确的,这也是 PHP 抛出错误的原因,即使您的函数从未被调用。

于 2011-05-31T05:36:42.200 回答
3

这个问题与 PHP 的执行方式无关(顺便说一下,它是字节编译的......),而是代码的解析方式。出现该错误后,PHP 解析器无法在内存中构建工作程序并通知您语法错误。

于 2011-05-31T05:37:29.487 回答