如果 PHP 是解释性语言(每行都在到达时执行),如果错误发生在从未执行的函数内部,它怎么会抛出错误?
或者我可能不明白解释的意思?
例如
<?php
$number = 1;
function square(){
$foo = 1 //missing semicolon, throws error
}
echo $number;
?>
如果 PHP 是解释性语言(每行都在到达时执行),如果错误发生在从未执行的函数内部,它怎么会抛出错误?
或者我可能不明白解释的意思?
例如
<?php
$number = 1;
function square(){
$foo = 1 //missing semicolon, throws error
}
echo $number;
?>
因为在 PHP 解释器开始之前,首先解析它的语法以尝试对其进行标记。
在 PHP 实际解释页面之前,它会通过预处理器运行。这会在页面实际开始运行之前发现页面中的任何错误,并执行一大堆其他操作来准备脚本以进行解释。
这可以确保脚本语法在任何事情发生之前都是正确的,这也是 PHP 抛出错误的原因,即使您的函数从未被调用。
这个问题与 PHP 的执行方式无关(顺便说一下,它是字节编译的......),而是代码的解析方式。出现该错误后,PHP 解析器无法在内存中构建工作程序并通知您语法错误。