PHP是否以与JavaScript相同的方式解释代码


Does PHP interpret code in the same way that JavaScript does?

PHP是否以与JavaScript相同的方式解释代码?经过一些研究,我发现JavaScript程序是在所谓的"两次通过"读取中运行的。第一次运行获取程序的语法和函数定义。(可以说是"分析"数据),第二次运行-好吧-运行数据。PHP的工作方式相同吗?如果没有,PHP如何解释代码?

PHP解释器的一般功能是什么?

大多数编程语言都是这样工作的,可能会保存为批处理文件。源代码被解析为标记,然后创建语法树并对其进行评估。这是三个独立的步骤,实际上将它们分开要简单得多。如果你想把它们拼凑在一起,这样代码就可以在解析时执行,这意味着解析器必须读取足够的内容,才能获得一个完整的可执行块,然后把它交给运行时,运行时必须把控制权交还给解析器。一件一件地做每件事容易多了。

您在问题中描述的是解释器如何工作的一个非常小的方面。

PHP确实做到了这一点:你可以判断,因为在代码中有一个比被调用函数的实际定义更高的函数调用是有效的。

<?php
myFunction();    //this is only valid here before the function itself because of two-pass parsing.
function myFunction() {
    .....
}
myFunction();    //in a single-pass system, the function call would have to be here, after the function itself.
?>

如果只有一次传递,那么只有在定义了函数本身之后才能调用该函数。有些语言确实是这样工作的(C和Pascal就是很好的例子)。如果您想在代码中早于函数本身的定义编写函数调用,这些语言需要使用文件。

不同的是,这些语言是经过编译的,这意味着只有在所有内容都构建成可执行文件后,代码才能真正运行。头文件的单次传递方法在解释环境中不起作用,因为虽然头可能允许编译器接受函数调用为有效,但interper仍然会失败,因为它根本没有可调用的函数。

出于这个原因,几乎任何解释语言都将使用这种两遍机制。

然而,正如我所说,这只是口译员整体设计的一小部分。