可能重复:
What are the benefits of OO programming? Will it help me write better code?
OO PHP Explanation for a braindead n00b
刚刚开始学习/玩PHP创建课程,我想知道他们解决了什么样的痛苦?我似乎只能通过一系列功能完成同样的工作进入文件。所以我的问题是:我为什么要使用课程?
答案 0 :(得分:5)
面向对象编程的三大支柱。好好学习:
面向对象编程的第一个支柱是封装。封装背后的想法是,您希望保持每个类型或类的谨慎和自包含,以便您可以更改一个类的实现而不影响任何其他类。
面向对象编程的第二个支柱,专业化,是通过继承实现的;特别是通过声明一个新类派生自现有类。专门的类继承了更通用的类的特性。专用类称为派生类,而更通用的类称为基类。
派生类型不是将代码从一种类型剪切并粘贴到另一种类型,而是继承共享字段和方法。如果更改基类中共享功能的实现方式,则不必更新每个派生类型中的代码;他们继承了这些变化。
多态性允许使用统一接口处理不同数据类型的值。多态的主要用法是属于不同类型的对象响应同名的方法,字段或属性调用的能力,每个调用根据适当的类型特定行为。程序员(和程序)不必事先知道对象的确切类型,因此确切的行为是在运行时确定的
另见:
http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming
答案 1 :(得分:4)
这是一种以更直观,真实的方式查看代码的方法。 (您将数据和所有可能的操作打包在一起。)它还鼓励封装,抽象,数据隐藏......您真正想要的是OOP的优势。
答案 2 :(得分:1)
基本上,类允许您将数据与代码(即组织)放在一起。
此外,类允许您的“关注者”自定义您的类,而无需重写代码,而是创建新的继承类。
每个基于类的代码都可以用函数重写,但要理解起来要难得多。
答案 3 :(得分:1)
通常,它可以自定义该组函数的行为。通常,您有一堆协同工作的功能。
使用这些功能的人可能只想修改其中一个特殊情况。或者,您可能会提供一个强制函数以某种原因进行交互的类,但您无法定义它们实际上做什么。
一个典型的例子:假设你有一些库来检查某些的东西没有重叠。
class Comparator:
def Greater(self, left, right): pass
def Less(self, left, right): pass
def EnforceNoOverlap(self, comparator, left, right)
assert comparator.Greater(left, right) != comparator.Lesser(left, right)
答案 4 :(得分:0)
这是一种通过正确的数据隐藏,关注点分离和其他一些最佳做法,使代码更精细的方法。
IMO迟早会在代码中仅使用函数会导致难以维护和扩展的意大利面条代码。修复错误更难,实现新功能更难,因为通常有很多代码复制。
此外,您不能在代码设计中使用多态,因此您无法使用抽象。
答案 5 :(得分:0)