PHP是否以与JavaScript相同的方式解释代码?经过一些研究,我发现JavaScript程序是在所谓的“双通”读取中运行的。第一次运行获取程序的语法和函数定义。 ('解析'数据可以这么说),第二次运行 - 好 - 运行数据。 PHP的工作方式是否相同?如果没有,PHP如何解释代码?
PHP解释器的一般功能是什么?
答案 0 :(得分:1)
大多数编程语言都是这样工作的,也许可以保存批处理文件。源代码解析到令牌,并创建语法树,然后评估。这是三个单独的步骤,将它们分开实际上要简单得多。如果你想把它们放在一起让代码在解析时被执行,那就意味着解析器必须读取足够的内容来获得一个可执行的完整块,然后将其交给运行时,这样就可以了然后必须将控制权交还给解析器。一个接一个地做所有事情要容易得多。
答案 1 :(得分:0)
您在问题中描述的内容是解释器工作方式的一个非常小的方面。
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就是很好的例子)。如果您希望在代码中更早地编写函数调用,而不是定义函数本身,则这些语言需要使用 header 文件。
不同之处在于编译了这些语言,这意味着代码只有在将所有内容都构建到可执行文件中后才会运行。带头文件的单遍方法在解释环境中不起作用,因为虽然头可能允许编译器接受函数调用有效,但是一个插件仍然会失败,因为它根本没有可用于调用的函数。
出于这个原因,几乎所有的解释语言都会使用这种双通机制。
但是,正如我所说,这只是口译员整体设计的一小部分。