PHP是编译的还是解释的?
PHP是编译的还是解释的?PHP是一种解释语言。允许您解释PHP的二进制文件是编译的,但您编写的是解释的PHP是编译的还是解释的?,php,Php,PHP是编译的还是解释的?PHP是一种解释语言。允许您解释PHP的二进制文件是编译的,但您编写的是解释的 您可以看到更多信息,PHP是一种解释语言。不过,它可以通过第三方工具编译成字节码。这是一个毫无意义的问题。PHP使用yacc(bison),就像GCC一样。yacc是一个“编译器”。yacc的输出是一个编译器。编译器的输出为“已编译”。PHP由yacc的输出解析。因此,根据定义,它是经过编译的 如果不满足,请考虑以下几点。php(二进制)和gcc都读取源代码并生成抽象语法树。在版本4和5下,
您可以看到更多信息,PHP是一种解释语言。不过,它可以通过第三方工具编译成字节码。这是一个毫无意义的问题。PHP使用yacc(bison),就像GCC一样。yacc是一个“编译器”。yacc的输出是一个编译器。编译器的输出为“已编译”。PHP由yacc的输出解析。因此,根据定义,它是经过编译的
如果不满足,请考虑以下几点。php(二进制)和gcc都读取源代码并生成抽象语法树。在版本4和5下,php然后遍历树将程序转换为字节码(编译步骤)。您可以使用将字节码转换为操作码(类似于汇编)。最后,php(特别是Zend引擎)解释字节码。相比之下,gcc遍历树并输出程序集;它还可以运行汇编程序和链接程序来完成该过程。调用一个由一个“解释”处理的程序和另一个由另一个“编译”处理的程序是毫无意义的。毕竟,这两个程序都是通过“编译器”运行的
你应该问你想问的问题。(“当PHP为每个请求重新编译我的源代码时,我是否会支付性能损失?”,等等)通常情况下,它会被解释,但有时会在编译时使用,这确实会提高性能。 用于执行此操作的开源工具:
hhvm.com两者都有。PHP被编译成中间字节码,然后由运行时引擎进行解释 PHP编译器的工作是解析PHP代码并将其转换为适合运行时引擎的形式。其任务包括:
- 忽略评论
- 解析变量、函数名等并创建符号表
- 构造程序的抽象语法树
- 写字节码
编译成字节码并在运行时解释它的过程对于运行在某种虚拟运行时机器(包括Perl、Java、Ruby、Smalltalk等)上的语言来说是典型的。至少它不会编译(或者我应该说优化)代码 此代码
for($i=0;$i<100000000;$i++);
echo $i;
for($i=0;$iA编译后的代码可以直接由计算机的CPU执行。也就是说,可执行代码是用CPU的本机语言指定的
解释语言的代码必须在运行时从任何格式翻译成CPU机器指令。此翻译由解释器完成
说一种语言是解释或编译的是不恰当的,因为解释和编译都是该语言实现的属性,而不是该语言的属性您正在使用的特定实现不会
最广泛使用的PHP实现是由Zend Engine驱动的,简称为PHP。Zend Engine将PHP源代码编译成可以执行的格式,因此Zend Engine可以作为解释器我知道这个问题很老,但它到处都是链接的,我认为这里所有的答案都不正确(可能是因为它们太旧了)
没有解释语言或编译语言。任何编程语言都可以解释和/或编译
首先,一种语言只是一组规则,所以当我们谈论编译时,我们指的是该语言的特定实现
例如,HHVM是PHP的一个实现。它使用JIT编译将代码转换为中间HipHop字节码,然后转换为机器代码。可以说它是编译的吗?一些Java实现(不是全部)也使用JIT。Google的V8也使用JIT
如今,使用编译与解释的旧定义是没有意义的
“是否编译了PHP?”是一个没有意义的问题,因为没有
在编译语言和
解释一个
一种可能的划分方法是(我觉得这种二分法没有任何意义):
编译语言使用提前编译(C,C++)
解释语言使用即时编译或完全不编译(Python、Ruby、PHP、Java).公认的答案显然是错误的。PHP已编译。故事结束。可能不是本机指令,而是解释的字节码。请记住,如果每次运行程序都需要源代码,这意味着它正在使用解释程序。因此,它是一种解释语言
另一方面,如果您编译了源代码并生成了可执行的编译代码,那么它就是使用complier。在这里,您不需要编写源代码。像C、JAVA一样,他指的是名为php的实用程序(或在windows php.exe上)是编译的。@nicky这意味着用来解释PHP的程序是编译的,但PHP本身是被解释的。但为什么在维基百科中会这样提到它呢?因为PHP4,PHP解析器编译输入以产生用于proc的字节码