PHP整体上仍然是程序化的吗?

PHP整体上仍然是程序化的吗?,php,programming-languages,Php,Programming Languages,我知道PHP5有一些面向对象的相似之处,但它不是一个真正的OOP环境,对吗?它也有真正的编译器吗?我看到了脚本的编译,这仍然意味着程序化。我假设它不是一个真正的编译器,因为任何PHP编译器都不会创建程序集?类似的问题已经讨论过很多次了。没有“真”或“假”OOP。由于php支持封装、多态性和继承,所以它是面向对象的编程语言。现在还没有真正的编译器。但是您可以看到,PHP现在是一种完全面向对象的语言,即使大多数API都不是 它支持类和对象 它遵循OOP的原则(继承、封装、抽象、多态) 因此,它是

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

类似的问题已经讨论过很多次了。没有“真”或“假”OOP。由于php支持封装、多态性和继承,所以它是面向对象的编程语言。现在还没有真正的编译器。但是您可以看到,PHP现在是一种完全面向对象的语言,即使大多数API都不是

  • 它支持类和对象
  • 它遵循OOP的原则(继承、封装、抽象、多态)
因此,它是一种完全面向对象的语言


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

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

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

  • Java
    Java编译的
    .class
    .jar
    文件不是汇编代码,而是Java字节码。然后Java虚拟机在运行时解释Java字节码

  • PHP
    PHP编译成Zend字节码,然后由Zend引擎在运行时解释


我认为你应该仔细阅读一下你所用单词的定义

“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%。

@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。尽管我第一次发表评论,但出于同样的原因,我还是投票决定关闭;这是唯一可以做的事情,因为评论很不幸不能被否决。