PHP 是否以与 JavaScript 相同的方式解释代码?经过一些研究,我收集到 JavaScript 程序是在所谓的“两次”读取中运行的。第一次运行获取程序的语法和函数定义。(可以说是“解析”数据),第二次运行 - 很好 -运行数据。PHP 是否以同样的方式工作?如果不是,PHP如何解释代码?
PHP解释器的一般功能是什么?
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 就是很好的例子)。如果您想在代码中比定义函数本身更早地编写函数调用,这些语言需要使用头文件。
不同之处在于这些语言是经过编译的,这意味着代码只有在所有内容都构建到可执行文件中后才会真正运行。带有头文件的单通道方法在解释环境中不起作用,因为虽然头文件可能允许编译器接受函数调用为有效,但解释器仍然会失败,因为它根本没有可调用的函数。
出于这个原因,几乎所有解释型语言都将使用这种两遍机制。
然而,正如我所说,这只是解释器整体设计的一小部分。