为什么PHP被认为是面向对象的?

时间:2010-10-08 23:48:47

标签: php oop programming-languages

我一直在阅读OOP的定义,并且无法理解为什么PHP被认为是面向对象的。

这有什么可以做的,PHP的“基本级别”不是,更高级的功能是什么?

6 个答案:

答案 0 :(得分:5)

在已经创建了大部分标准库并且语言已经建立之后,通过版本3-5将OO功能分阶段添加到PHP中。 Background

因此,标准库不是面向对象的,因此日常的PHP脚本根本不需要使用任何OO样式的功能。尽管PHP现在具有面向对象语言的大多数标准功能,但许多作者并未使用它们。

以后添加到该语言的库函数继续使用函数样式来保持一致性,尽管许多扩展模块都使用对象。

答案 1 :(得分:3)

几乎任何允许您创建和实例化类的语言都可以被视为面向对象。

PHP具有这些功能,但并没有真正扩展它们。您可以使用OOP来帮助您的代码,但这不是必需的。 Java,C#和C ++几乎不允许您编写非OO代码,因为所有内容都必须在类中。

  

这有什么可以做的,PHP的“基本级别”不是更高级的功能吗?

你可以说几乎任何OO语言。 OO代码的一般定义是在代码中创建类并实例化它们,从其他类调用它们的方法。没有什么能阻止你只使用静态方法或一个带有'run'方法的超类,它只调用类中的其他方法,这两种方法肯定不是面向对象的。据我所知,没有任何语言可以说“你必须创建类并实例化它们,否则你将被驱逐!”即使有,我怀疑他们会因为控制狂的原因而变得非常接近主流。

初学者经常学习基础知识,同时将所有代码放在一个可以在程序统计中调用的方法中。一旦他们获得了更多“高级”功能,如方法和类,他们就会获得其他选择。 :d

答案 2 :(得分:3)

这里已经有了足够的(并且被接受的)答案,但为了清楚起见,我认为我会在火上扔另一个日志。

“class”关键字(以及它在Java中的无处不在的执行)不是面向对象的编程。正如CrazyJungleDrummer所指出的那样,在Java之类的东西中完全编写程序代码是完全可行的(并且非常常见);代码位于名为HelloWorld的类中的花括号之间的事实不会改变这一事实。只是将一堆函数隐藏在类中并将它们称为静态方法也不是OOP - 它是命名空间。

将适当的对象视为一个结构(或“自定义类型”,取决于您以前的语言暴露),知道该怎么做。对象是您不(或不应该)直接操作的数据;你让他们自己做事,然后让他们告诉你自己。您可以创建实体并传递消息。 OOP是关于处理你的数据,就像它已经长大并可以处理自己一样。它不是主要代码存在的位置,而是数据的处理方式。

哦,还有一件事 - 即使用一种更明显地倾向于OOP的语言,真正的OOP并不总是正确的方法。这都与数据有关。

答案 3 :(得分:1)

您可以使用PHP编写classes,但大多数核心功能都不是面向对象的。

答案 4 :(得分:0)

自从这个问题出现以来已经有很长一段时间了,但是我发现了这篇文章并想要扼杀作者的观点。

PHP is not object oriented!

答案 5 :(得分:0)

这个答案的灵感来自于这个Man和他的answer

面向对象技术经常被描述 封装,多态和继承的术语。但 这些只是身份。 如果要成功实现面向对象技术 它必须强调对象。

当我们说面向对象或面向对象时,它可以引用几个东西:

  1. 面向对象的分析和设计[OOAD]
  2. 面向对象设计[OAD]
  3. 面向对象的数据库
  4. 面向对象的建模
  5. 面向对象的操作系统
  6. 面向对象编程[OOP] - >关注主题
  7. 面向对象的软件工程
  8. 面向对象的用户界面
  9. 面向对象的编程语言[OOP]是什么?

    Alan Kays ["Considered by some to be the father of object-oriented programming"] [定义] 5链接Gordon

    1. EverythingIsAnObject。

    2. 对象通过发送和接收消息(就对象而言)进行通信。

    3. 对象有自己的记忆(就对象而言)。

    4. 每个对象都是一个类的实例(必须是一个对象)。

    5. 该类保存其实例的共享行为(以程序列表中的对象形式)

    6. 现在很明显可以看出Java,C ++和PHP违反了规则1?为什么bcoz int, float etc. (there are a total of eight primitive types).因此它不能严格意义上的面向对象,但有些人认为它是OOP。

      OOP的一般方法是将软件系统视为一组称为“对象”的交互实体,每个实体都由身份定义,成员变量描述>州,并根据可以调用的方法描述行为

      OOP不是什么?

      面向对象技术经常被描述 封装,多态和继承的术语。但 这些只是身份。

      面向对象的系统,语言或环境至少应包括封装,多态和继承。

      1. 多态性和继承当然是促进的模式 OO编程,但不仅仅是绑定它
      2. enter image description here

        1. 面向对象的范式并不完全是领域 高级编程语言 - >可能是辩论话题,但我来了 跨越 OOP in Assembly
        2. Bob叔叔Bob Bob在他的演讲中展示了C如何实现封装,继承和多态 LINK

          1. OO基于对现实世界对象的建模//用于营销目的
          2. OOP和功能之间的区别?

            这可能不是完美的答案,但我试了一下,对谷的知识感兴趣。

            注意: 在谷歌随机找到图像

            enter image description here