PHP是PHP 4.0以来的编译语言?

时间:2012-05-29 11:37:30

标签: php zend-framework

我在阅读This Article后有疑问。我读过几种形式和文章,php是一种解释语言,即使我发现Stackoverflow也是如此,但当我从here读到它时,我感到困惑。任何人都可以通过某些经过验证的链接或引用来解释这一点。

3评论后补充: -    文章说: -

PHP became a compiled language in the year 2000, when PHP 4 was released for the first time. Until version 3, PHP source code was parsed and executed right away by the PHP interpreter.

请不要在没有查看精神文章的情况下提出您的答案。阅读完这篇文章后我对此产生了疑问,我对本文的内容更加苛刻,

3 个答案:

答案 0 :(得分:5)

不是。
你提到的文章谈到了HipHop,它是Facebook将PHP编译成C ++以加快执行速度的工具。


编辑:

正如文章中所解释的那样:

  

PHP成为2000年的一种编译语言,当时PHP 4首次发布。在版本3之前,PHP解释器 PHP源代码被立即解析并执行   第一阶段解析PHP源代码并生成PHP代码的二进制表示,称为Zend操作码

这意味着PHP代码不会被直接解析和执行,而是在运行时首先编译 所以是的,它以某种方式编译,但在内部没有用户的干预,这使得它与真正的编译语言(如Java或C ++)不同。

这是我的个人解释,如果错误,请随时发表评论。

答案 1 :(得分:0)

你提到的文章是关于一个名为HipHop的项目,它不是经典的PHP。

HipHop将采用你的php项目(php文件)并在C ++中生成另一组具有相同行为的文件。

一旦项目成为C ++项目,它就变成了需要编译的项目。

HipHop是由facebook工程师创建的,用于提高代码的性能(他们使用PHP很多),而无需用另一种语言重写整个堆栈。

为了澄清自PHP4以来PHP是一种编译语言的引用,确实从PHP4开始,脚本在解析时不会执行:每个包含的文件都被预先“编译”到opCode,而这个操作码是动态执行。

这个2阶段的过程支持创建特定的opCode缓存工具,可以大大缩短PHP的执行时间。例如,参见http://xcache.lighttpd.net/

opCode由“虚拟机”执行,该虚拟机知道如何解释这些操作码(有点像Java虚拟机)。

HipHop带来了额外的性能,因为绕过了这个opCode层。

答案 2 :(得分:0)

与此相关:

  

PHP在2000年成为一种编译语言,当时PHP 4是   第一次发布。直到版本3,PHP源代码是   由PHP解释器立即解析并执行。

这也是正确的,但你必须看一下“编译”或“解释”的定义才能真正掌握这意味着什么。区别实际上并不那么明确。编译器的含义通常被认为是将源代码转换为可执行形式的软件。但是,更正式的编译器定义是将一种表示形式转换为另一种形式的东西,就像文章中提到的那样。

Interpreter是一个软件,它实际上执行源代码中定义的操作,而不是(仅)转换。基于该定义,PHP仍然(默认情况下,排除HipHop之类的东西)被解释。在发布PHP4时所做的更改是源代码不是直接解析和执行,而是首先由解释器编译到内存表示(在本例中为操作码)内存中,然后执行。这种“汇编”就是现在几乎所有不同语言的现代翻译都以某种形式出现。