学习PHP的朋友们都知道,PHP在中小型企业的应用是非常广泛包括建站、小程序、CRM与OA等。那么作为基础中的基础,PHP面向对象你又掌握了多少呢?
今天这篇文章,就来给大家讲一讲关于面向对象的一些事,希望能对大家有所帮助。
什么是面向对象?
面向对象就是把生活中要解决的问题都用对象的方式进行存储–把所有的数据用属性、方法表现出来。
面向对象编程就是编程的时候数据结构(数据组织方式 )都通过对象的结构进行存储,使用属性和方法组织起来。对象之间的互动是通过方法的调用完成互动。
对象的描述方式更加贴合真实世界,有利于对大型业务的理解,具有多人合作方便、减少代码的冗余、灵活性高、代码的可重用性发挥到极致、可扩展性等优势。
五大设计原则——SOLID
学习面向对象编程像“抽象”、“封装”、“多态”、“继承” 等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。
接下来,本文就为大家介绍面向对象设计的5个基本原则:
S – 单一功能原则(SRP)
O – 开闭原则(OCP)
L – 里氏替换原则(LSP)
I – 接口隔离原则(DIP)
D – 依赖倒置原则(OCP)
单一职责原则
单一职责有两个含义:一个是避免相同的职责分散到不同的类中, 别一个是避免一个类承担太多职责。
遵守SPR原则的优势:
●减少类之间的耦合:当需求变化时,只修改一个类,从而隔离了变化带来类对其他职责的影响
●提高类的复用性:按需引用,一个类负责一个职责,需求的变动只需要修改对应的类或增加某一职责
●降低类的复杂度:职责单一,功能分散开降低一个类多个职责类的复杂度
不遵守SRP会影响对类的复用性。当只需要用该类的某一个职责时,由于它和其他的职责耦合在一起,也就很难分离出。
代码示例:
开闭原则
对象和实体应该对扩展开放,但是对修改关闭。
简单的说就是,一个类应该不用修改其自身就能很容易扩展其功能。
比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。
代码示例:
里氏替换原则
如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。
这句定义的意思是说:每个子类或者衍生类可以毫无问题地替代基类/父类。
这就好比:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。
代码示例:
接口隔离原则
接口隔离原则是指:客户端不应该被强制去实现于它不需要的接口。
有一个清晰的例子来说明示范这条原则。当一个类需要一个大量的设置项,为了方便不会要求客户端去设置大量的选项,因为在通常他们不需要所有的设置项。使设置项可选有助于我们避免产生“胖接口”。
代码示例:
依赖倒置原则
这条原则说明两个基本的要点:
●高阶的模块不应该依赖低阶的模块,它们都应该依赖于抽象
●抽象不应该依赖于实现,实现应该依赖于抽象
这条起初看起来有点晦涩难懂,但是如果你使用过PHP框架(例如 Symfony),你应该见过依赖注入(DI)对这个概念的实现。虽然它们不是完全相通的概念,依赖倒置原则使高阶模块与低阶模块的实现细节和创建分离。可以使用依赖注入(DI)这种方式来实现它。更多的好处是它使模块之间解耦。耦合会导致你难于重构,它是一种非常糟糕的的开发模式。
代码示例:
总结
面向对象设计需要遵守如上原则,不过实际的代码设计一定要简单、简单、简单。在实际编码中要根据情况进行取舍,一味遵守原则,而不注重实际情况的话,可能会让你的代码变的难以理解