🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
面向对象基本特征: ### **封装** 1. 隔离性: 被封装后的对象,其外部对象是无法直接访问对象的内部实现细节,内部实现细节的的改动不会影响到外部对象的访问原则(即:对象内部修改后,在公开暴露指定的访问路径不变的情况下,外部访问它的对象是无需修改的),这是隔离性的体现,同时也是实现高内聚,低耦合的最根本的思想之一; 2. 可复用性: 被封装后的对象可以被外部多个对象访问,而无需为每个外部对象去指定不同的服务对象;减少代码的冗余。 3. 可读性: 合理设置被封装的对象名称,可增强代码的可读性,通过方法名或者类名即可了解其作用。 ### **继承** 1. PHP中主要通过extends关键字来实现继承: class Student extends Person{} 2. PHP只能单继承,不支持一个类继承多个类。但是一个类可以进行多层继承(即A继承于B,而C又继承于A,C通过A间接继承了B) 3. 子类继承父类非私有的属性和方法,可以通过$this关键字进行访问 4. 覆盖:子类中声明与父类相同名称的属性和方法,则该属性和方法会覆盖父类中的属性和方法,属性被覆盖后,无法访问父类中的属性,方法被覆盖后,可以通过parent::方法名()进行访问 ### **多态** 同一方法作用于不同对象时,产生不同的执行结果 多态存在的三个必要条件:继承、重写(子类继承父类后对父类方法进行重新定义)、父类引用指向子类对象 示例如下: ``` abstract class Person{ // 父类使用abstract关键字修饰 abstract function say(); } class Chinese extends Person{ // 子类重写父类方法 function say(){ echo "我是中国人<br>"; } } class English extends Person{ // 子类重写父类方法 function say(){ echo "我是英国人"; } } $zhangsan = new Chinese(); $zhangsan->say(); $z = new English(); $z->say(); Person $p = new Chinese(); // 父类引用指向子类对象 上述代码中,两个子类都是继承自同一父类,但因为都重写了父类的方法,表现出了不同的形态 ``` 基本原则: ### **1、单一职责原则(SRP)** 单一职责有两个含义:一个是避免相同的职责分散到不同的类中,另一个是避免一个类承担太多职责 ### **2、开放封闭原则(OCP)** 一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的 ### **3、里氏替换原则(LSP)** 子类型必须能够替换掉它们的父类型,并出现在父类能够出现的任何地方。 ### **4、依赖倒置原则(DIP)** 依赖倒置简单地讲就是将依赖关系倒置为依赖接口,具体概念如下: * 上层模块不应该依赖于下层模块,它们共同依赖于一个抽象(父类不能依赖子类,它们都要依赖抽象类)。 * 抽象不能依赖于具体,具体应该依赖于抽象。 ### **5、接口隔离原则(ISP)** 不同的模块要通过抽象接口隔离开,而不是通过具体的类强耦合。