我一直在阅读OOP的定义,并且无法理解为什么PHP被认为是面向对象的。
这有什么可以做的,PHP的“基本级别”不是,更高级的功能是什么?
答案 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)
自从这个问题出现以来已经有很长一段时间了,但是我发现了这篇文章并想要扼杀作者的观点。
答案 5 :(得分:0)
面向对象技术经常被描述 封装,多态和继承的术语。但 这些只是身份。 如果要成功实现面向对象技术 它必须强调对象。
当我们说面向对象或面向对象时,它可以引用几个东西:
纯面向对象的编程语言[OOP]是什么?
Alan Kays ["Considered by some to be the father of object-oriented programming"
] [定义] 5链接Gordon:
EverythingIsAnObject。
对象通过发送和接收消息(就对象而言)进行通信。
对象有自己的记忆(就对象而言)。
每个对象都是一个类的实例(必须是一个对象)。
该类保存其实例的共享行为(以程序列表中的对象形式)
现在很明显可以看出Java,C ++和PHP违反了规则1?为什么bcoz int, float etc. (there are a total of eight primitive types).
因此它不能严格意义上的面向对象,但有些人认为它是OOP。
OOP的一般方法是将软件系统视为一组称为“对象”的交互实体,每个实体都由身份定义,成员变量描述>州,并根据可以调用的方法描述行为
OOP不是什么?
面向对象技术经常被描述 封装,多态和继承的术语。但 这些只是身份。
面向对象的系统,语言或环境至少应包括封装,多态和继承。
Bob叔叔Bob Bob在他的演讲中展示了C如何实现封装,继承和多态 LINK