0

读完这篇文章后,我很怀疑。我读过一些表格和文章说 php 是一种解释性语言,即使我在Stackoverflow上也发现了同样的东西,但是当我从这里读到它时,我感到很困惑。任何人都可以通过某些经过身份验证的链接或引用向我解释这一点。

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.

请不要在没有查看提及的文章的情况下提出您的答案。读完这篇文章后我产生了疑问,我对这篇文章的内容更加好奇,

4

3 回答 3

5

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


编辑:

如文章中所述:

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

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

这是我个人的理解,如有错误欢迎评论。

于 2012-05-29T11:41:24.360 回答
0

与此相关:

PHP 在 2000 年成为编译语言,当时 PHP 4 首次发布。在版本 3 之前,PHP 源代码由 PHP 解释器立即解析和执行。

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

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

于 2012-05-29T12:01:15.337 回答
0

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

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

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

HipHop 由 facebook 工程师创建,旨在提高他们代码的性能(他们经常使用 PHP),而不需要用另一种语言重写他们的整个堆栈。

为了澄清 PHP 是自 PHP4 以来的编译语言的引用,确实,自 PHP4 以来,脚本在解析时并未执行:每个包含的文件都预先“编译”为操作码,并且动态执行的是此操作码。

这个 2 阶段的过程允许创建特定的操作码缓存工具,可以大大提高 PHP 的执行时间。cf 例如http://xcache.lighttpd.net/

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

HipHop 会带来额外的性能,因为这个操作码层被绕过了。

于 2012-05-29T11:52:44.887 回答