IT培训-高端面授IT培训机构
云和教育:云和数据集团高端IT职业教育品牌
  • 国家级
    全民数字素养与技能培训基地
  • 河南省
    第一批产教融合型企业建设培育单位
  • 郑州市
    数字技能人才(码农)培养评价联盟

PHPer必学的进阶教程:PHP面向对象设计的五个基准原则

  • 发布时间:
    2019-08-12
  • 版权所有:
    云和教育
  • 分享:

学习PHP的朋友们都知道,PHP在中小型企业的应用是非常广泛包括建站、小程序、CRM与OA等。那么作为基础中的基础,PHP面向对象你又掌握了多少呢?

配图1 PHP面向对象设计的五个基准原则.jpg

今天这篇文章,就来给大家讲一讲关于面向对象的一些事,希望能对大家有所帮助。

什么是面向对象?

配图2 PHP面向对象设计的五个基准原则.jpg

面向对象就是把生活中要解决的问题都用对象的方式进行存储–把所有的数据用属性、方法表现出来。

面向对象编程就是编程的时候数据结构(数据组织方式 )都通过对象的结构进行存储,使用属性和方法组织起来。对象之间的互动是通过方法的调用完成互动。

对象的描述方式更加贴合真实世界,有利于对大型业务的理解,具有多人合作方便、减少代码的冗余、灵活性高、代码的可重用性发挥到极致、可扩展性等优势。

五大设计原则——SOLID

学习面向对象编程像“抽象”、“封装”、“多态”、“继承” 等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。

接下来,本文就为大家介绍面向对象设计的5个基本原则:

S – 单一功能原则(SRP)

O – 开闭原则(OCP)

L – 里氏替换原则(LSP)

I – 接口隔离原则(DIP)

D – 依赖倒置原则(OCP)

单一职责原则

配图3 PHP面向对象设计的五个基准原则.jpg

单一职责有两个含义:一个是避免相同的职责分散到不同的类中, 别一个是避免一个类承担太多职责。

遵守SPR原则的优势:

●减少类之间的耦合:当需求变化时,只修改一个类,从而隔离了变化带来类对其他职责的影响

●提高类的复用性:按需引用,一个类负责一个职责,需求的变动只需要修改对应的类或增加某一职责

●降低类的复杂度:职责单一,功能分散开降低一个类多个职责类的复杂度

不遵守SRP会影响对类的复用性。当只需要用该类的某一个职责时,由于它和其他的职责耦合在一起,也就很难分离出。

代码示例:

配图4 PHP面向对象设计的五个基准原则.jpg

开闭原则

对象和实体应该对扩展开放,但是对修改关闭。

简单的说就是,一个类应该不用修改其自身就能很容易扩展其功能。

比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将服务端和客户端分开,公共部分抽象出来。

代码示例:

配图5 PHP面向对象设计的五个基准原则.jpg

里氏替换原则

如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

这句定义的意思是说:每个子类或者衍生类可以毫无问题地替代基类/父类。

这就好比:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,也不管是总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。

代码示例:

配图6 PHP面向对象设计的五个基准原则.jpg

接口隔离原则

接口隔离原则是指:客户端不应该被强制去实现于它不需要的接口。

有一个清晰的例子来说明示范这条原则。当一个类需要一个大量的设置项,为了方便不会要求客户端去设置大量的选项,因为在通常他们不需要所有的设置项。使设置项可选有助于我们避免产生“胖接口”。

代码示例:

配图7 PHP面向对象设计的五个基准原则.jpg

依赖倒置原则

这条原则说明两个基本的要点:

●高阶的模块不应该依赖低阶的模块,它们都应该依赖于抽象

●抽象不应该依赖于实现,实现应该依赖于抽象

这条起初看起来有点晦涩难懂,但是如果你使用过PHP框架(例如 Symfony),你应该见过依赖注入(DI)对这个概念的实现。虽然它们不是完全相通的概念,依赖倒置原则使高阶模块与低阶模块的实现细节和创建分离。可以使用依赖注入(DI)这种方式来实现它。更多的好处是它使模块之间解耦。耦合会导致你难于重构,它是一种非常糟糕的的开发模式。

代码示例:

配图8 PHP面向对象设计的五个基准原则.jpg

总结

面向对象设计需要遵守如上原则,不过实际的代码设计一定要简单、简单、简单。在实际编码中要根据情况进行取舍,一味遵守原则,而不注重实际情况的话,可能会让你的代码变的难以理解