PHP仍然是程序整体吗?

时间:2010-06-07 04:01:51

标签: php programming-languages

我知道PHP 5有一些面向对象的相似之处,但它还不是真正的OOP环境吗?它还有一个真正的编译器吗?我看到编译脚本仍然意味着程序性。我认为它不是真正的编译器,因为那里的任何PHP编译器都不会创建程序集吗?

3 个答案:

答案 0 :(得分:7)

我认为你应该读一下你正在使用的词的定义!

“Assemblies”是.NET用来表示“一个DLL加上你可以部署的一些支持的东西”的词。也许你在考虑“汇编代码”?

编译器编译为各种表示形式。 JVM字节码,CLR字节码,x86字节码,Python字节码,MIPS字节码,ARM字节码,......这些都是编译器的有效目标。请注意,对于JVM和x86字节码,存在硬件(CPU)和软件(解释器)执行环境,因此目标代码是否为“硬件”并不会真正发挥作用。

编写代码与解释代码并不意味着任何涉及OO与程序与功能的关系。 OO与支持多态,数据隐藏,数据接口实现和可组合性有关。

PHP支持所有这些,所以你可以用它来直接实现OO设计,所以我会说PHP支持OO。

最后:您应该看看Facebook PHP编译器,它将PHP编译为C,然后编译为C到x86,与传统的PHP执行环境相比,显然可以使其加速50%。

答案 1 :(得分:6)

PHP现在是一种完全面向对象的语言,即使大部分API都不是。

  • 它支持类和对象。
  • 遵循OOP(继承,封装,抽象,多态)的原则

因此它是一种完全面向对象的语言。


PHP实际上会编译(默认情况下在每次运行时除非使用“加速器”)将其脚本编译为中间字节代码,然后由Zend Engine运行。

它实际上非常接近其他语言:

  • VB.NET / C#/ F#/其他.NET语言
    编译时这些语言不会在汇编代码中输出二进制文件,而是在通用中间语言(CIL)中输出二进制文件。然后,.NET虚拟机在运行时解释CIL字节码。

  • <强>爪哇
    Java编译.class.jar文件,这些文件不在汇编代码中,而是在Java字节码中。然后,Java虚拟机

  • 在运行时解释Java字节码
  • <强> PHP
    PHP编译成Zend Bytecode,然后由Zend Engine在运行时进行解释。

答案 2 :(得分:1)

很多时候讨论过类似的问题。没有“真实”或“虚假”的OOP。由于php支持封装,多态,继承 - 它是面向对象的编程语言。而且还没有“真正的”编译器。但你可以查看Facebook's Hip-Hop