我知道PHP 5有一些面向对象的相似之处,但它还不是真正的OOP环境吗?它还有一个真正的编译器吗?我看到编译脚本仍然意味着程序性。我认为它不是真正的编译器,因为那里的任何PHP编译器都不会创建程序集吗?
答案 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都不是。
因此它是一种完全面向对象的语言。
PHP实际上会编译(默认情况下在每次运行时除非使用“加速器”)将其脚本编译为中间字节代码,然后由Zend Engine运行。
它实际上非常接近其他语言:
VB.NET / C#/ F#/其他.NET语言
编译时这些语言不会在汇编代码中输出二进制文件,而是在通用中间语言(CIL)中输出二进制文件。然后,.NET虚拟机在运行时解释CIL字节码。
<强>爪哇强>
Java编译.class
和.jar
文件,这些文件不在汇编代码中,而是在Java字节码中。然后,Java虚拟机
<强> PHP 强>
PHP编译成Zend Bytecode,然后由Zend Engine在运行时进行解释。
答案 2 :(得分:1)
很多时候讨论过类似的问题。没有“真实”或“虚假”的OOP。由于php支持封装,多态,继承 - 它是面向对象的编程语言。而且还没有“真正的”编译器。但你可以查看Facebook's Hip-Hop