PHP整体上仍然是程序化的吗?
我知道PHP5有一些面向对象的相似之处,但它不是一个真正的OOP环境,对吗?它也有真正的编译器吗?我看到了脚本的编译,这仍然意味着程序化。我假设它不是一个真正的编译器,因为任何PHP编译器都不会创建程序集?类似的问题已经讨论过很多次了。没有“真”或“假”OOP。由于php支持封装、多态性和继承,所以它是面向对象的编程语言。现在还没有真正的编译器。但是您可以看到,PHP现在是一种完全面向对象的语言,即使大多数API都不是PHP整体上仍然是程序化的吗?,php,programming-languages,Php,Programming Languages,我知道PHP5有一些面向对象的相似之处,但它不是一个真正的OOP环境,对吗?它也有真正的编译器吗?我看到了脚本的编译,这仍然意味着程序化。我假设它不是一个真正的编译器,因为任何PHP编译器都不会创建程序集?类似的问题已经讨论过很多次了。没有“真”或“假”OOP。由于php支持封装、多态性和继承,所以它是面向对象的编程语言。现在还没有真正的编译器。但是您可以看到,PHP现在是一种完全面向对象的语言,即使大多数API都不是 它支持类和对象 它遵循OOP的原则(继承、封装、抽象、多态) 因此,它是
- 它支持类和对象
- 它遵循OOP的原则(继承、封装、抽象、多态)
PHP实际上会将其脚本编译成中间字节码,然后由Zend引擎运行(在每次运行时默认情况下,除非使用“加速器”) 它实际上与其他语言非常接近:
- VB.NET/C#/F#/其他.NET语言
这些语言在编译时不会以汇编代码的形式输出二进制文件,而是以公共中间语言(CIL)的形式输出二进制文件。然后.NET虚拟机在运行时解释CIL字节码 - Java
Java编译的
和.class
文件不是汇编代码,而是Java字节码。然后Java虚拟机在运行时解释Java字节码.jar
- PHP
PHP编译成Zend字节码,然后由Zend引擎在运行时解释
最后:您应该看看Facebook PHP编译器,它将PHP编译成C,然后将C编译成x86,与传统的PHP执行环境相比,它的速度明显提高了50%。@coffeeaddict:实际上,.NET assembiles不是在汇编中编译的。它们以CIL字节码编译,然后由.NET虚拟机解释。引用你的话,它们并不“需要汇编代码”。事实上,根本不涉及“汇编代码”。@coffeeaddict:一点也不。汇编代码基本上是直接发送到CPU的纯处理指令。装配依赖于平台和体系结构。CIL字节码(或就此而言的任何字节码)是一组用于虚拟机的指令,然后虚拟机根据主平台和体系结构向CPU发送适当的指令。因此,可以在多个平台上部署相同的二进制文件,而无需进行任何更改(不考虑依赖项)。这也是为什么.NET二进制可以同时针对x86和x64,但是C++程序(汇编中编译)需要两个独立的二进制文件。这是不是修辞?PHP一点也不强制执行——类型、OOP,你有什么。@coffeeaddict:C#不强制执行OOP,VB.NET不强制执行OOP,Java不强制执行OOP。我可以只使用一个类和一组函数,基本上使用过程代码(或者在VB.NET中,您甚至可以使用一个模块)。作为一名程序员,你必须决定用哪种方式来构造你的程序。没有任何编程语言可以强迫你这么做。事实上,它编译成汇编或字节码并没有改变任何东西。继续下去,PHP的问题不在于语言本身。大多数使用它的程序员受教育程度低,这使得这种语言名声不好。大多数关于PHP的书都非常糟糕。网络上的大多数例子也是如此。PHP中一个好的结构化站点可以像ASP.NET中一个好的结构化站点一样面向对象。对于投票关闭的人来说,这是一个“主观且有争议的”:问题本身不是,只是@coffeeaddict.:)我只是投票决定以“主观和有争议”结束。@coffeeaddict完全不知道是什么使一种语言成为面向对象的(对他来说,面向对象是一种汇编语言,是强类型的),或者刚刚开始讨论这个问题。面向对象编程(OOP)是一种编程范式,它使用“对象”——由数据字段和方法及其交互组成的数据结构——来设计应用程序和计算机程序。这就是OOP的全部含义。PHP支持这一点,我是@Andrew。尽管我第一次发表评论,但出于同样的原因,我还是投票决定关闭;这是唯一可以做的事情,因为评论很不幸不能被否决。