PHP编译或解释?

PHP编译或解释?

PHP语言被解释。 可以让你解释PHP的二进制文件被编译,但是你写的是被解释的。

您可以在维基百科页面上查看更多解释性语言

都。 PHP被编译成一个中间字节码,然后被运行时引擎解释。

PHP编译器的工作是parsing你的PHP代码,并将其转换成适合运行时引擎的forms。 其任务包括:

  • 忽略评论
  • parsingvariables,函数名称等,并创build符号表
  • 构build程序的抽象语法树
  • 写字节码

根据您的PHP设置,这一步通常只需要一次,第一次调用脚本。 编译器输出caching,以加快后续使用的访问。 如果脚本被修改,然而,编译步骤再次完成。

当脚本被调用时,运行时引擎遍历AST和字节码。 符号表用于存储variables的值并为函数提供字节码地址。

编译为字节码并在运行时进行解释的过程对于在某种虚拟运行时计算机(包括Perl,Java,Ruby,Smalltalk等)上运行的语言来说是很典型的。

在一般情况下,这是解释,但有一段时间可以使用它作为编译,这是真的提高性能。 开源工具来执行此操作: http : //www.phpcompiler.org/

PHP是一种解释型语言。 不过,它可以通过第三方工具编译成字节码。

说一种语言被解释或编译是不准确的,因为解释和编译既是该特定语言实施的特性,也不是语言本身的特性。 所以,从理论上讲,任何语言都可以被编译或解释,这只取决于你所使用的具体实现。

这是一个毫无意义的问题。 PHP使用yacc(bison),就像GCC一样。 yacc是一个“编译器编译器”。 yacc的输出是一个编译器。 编译器的输出是“编译”的。 PHP被yacc的输出parsing。 按照定义,这是编译的。

如果不满足,请考虑以下事项。 php(二进制)和gcc都读取你的源代码,并产生一个抽象的语法树。 在版本4和5下,php然后遍历树来将程序转换为字节码(编译步骤)。 您可以看到使用Vulcan Logic Dumper将字节码转换为操作码(类似于assembly)。 最后,php(特别是Zend引擎)解释字节码。 gcc,相比之下,走树和输出组装; 它也可以运行汇编器和连接器来完成这个过程。 调用由一个“解释”处理的程序和由另一个“编译”处理的另一个程序是没有意义的。 毕竟,这两个程序都是通过“编译器”运行的。

实际上你应该问你想问的问题。 (“当我为每个请求重新编译我的源代码时,我付出了性能损失?”等)

编译后的代码可以由计算机的CPU直接执行。 也就是说,可执行代码是用CPU的本地语言指定的

解释型语言的代码必须在运行时从任何格式转换为CPU机器指令。 这个翻译是由翻译完成的。

说一种语言被解释或汇编是不合适的,因为解释和汇编既是该特定语言实施特性也不是语言本身的特性。 所以,任何语言都可以被编译或者解释 – 这取决于你正在使用的特定实现。

最广泛使用的PHP实现是由Zend引擎驱动的,简称为PHP。Zend引擎将PHP源代码编译为可以执行的格式,因此Zend引擎可以作为解释器

谢谢 :)

我知道这个问题是古老的,但它连接到所有的地方,我认为这里的所有答案是不正确的(也许是因为他们是旧的)。

没有解释语言或编译语言这样的东西。 任何编程语言都可以被解释和/或编译。

首先一种语言只是一套规则,所以当我们谈论编译时,我们会参考该语言的具体实现

例如, HHVM是PHP的一个实现。 它使用JIT编译将代码转换为中间HipHop字节码,然后转换为机器码。 这是否足以说这是编译? 一些Java实现(不是全部)也使用JIT。 Google的V8也使用JIT。

使用编译与解释的旧定义现在是没有意义的。

“PHP编译?” 是一个非感性的问题,因为编译语言和解释语言之间不再有明确的和一致的分隔符。

一种可能的方式来界定他们(我不觉得在这种二分法)任何意义:

编译语言使用前期编译(C,C ++);

解释型语言使用即时编译或根本不编译(Python,Ruby,PHP,Java)。

至less它没有编译(或者我应该说优化)的代码尽可能多的人想要它。

这个代码…

 for($i=0;$i<100000000;$i++); echo $i; 

每次运行都会使程序延迟很多。

它可能已经发现,这是一个计算,只需要第一次完成。

编译器和解释器的传统分类在即时编译和字节码解释的情况下是模糊的.PHP被解释。但是,这并不意味着PHP没有被编译.PHP编译器执行语法检查,中间代码生成和优化.PHP是因为PHP编译器生成的目标代码被另一个预编译的本地二进制文件parsing。它将中间代码解释为cpu可读指令。这就是为什么在指令执行方面没有其他语言可以像汇编语言那样优先。因为汇编指令汇编编译器)产生已经存在于CPU中。

它被解释为PHP代码被引擎解释(通常先转换成字节码); 它也被编译为一些工具可以将PHP代码编译成可执行文件,如phc。

php.exe (PHP解释器)显然是一个编译的可执行文件。

不过,我不认为这是你问的。

当一个PHP脚本被加载时,它被编译成一个名为Zend操作码的二进制格式,存入内存,然后被有效地解释。

资料来源: https : //stackoverflow.com/a/18595821/3881189

PHP是一种解释型语言,但用于解释PHP的程序已经编译完成。

PHP编译器生成机器独立后的字节码 ,这个字节码由运行时引擎转换成机器可理解的代码。

PHP是解释器,你不编译它,你把它保存在文件中,服务器逐行读取它。 编译C ++,编译整个脚本,然后运行exe,你的程序。 太迟了现在做出改变。

其解释。 所以当你在你的代码中放置太多的注释的时候记住这一点…