PHP实战中知识总结 / 面向对象 - 三大基本特征和五大基本原则

一、面向对象基本特征:

1、封装

(1)隔离性

被封装后的对象,其外部对象是无法直接访问对象的内部实现细节,内部实现细节的的改动不会影响到外部对象的访问原则(即:对象内部修改后,在公开暴露指定的访问路径不变的情况下,外部访问它的对象是无需修改的),这是隔离性的体现,同时也是实现高内聚,低耦合的最根本的思想之一;

(2)可复用性

被封装后的对象可以被外部多个对象访问,而无需为每个外部对象去指定不同的服务对象;减少代码的冗余。

(3)可读性

合理设置被封装的对象名称,可增强代码的可读性,通过方法名或者类名即可了解其作用。

2、继承

(1)PHP中主要通过extends关键字来实现继承: class Student extends Person{}

(2)PHP只能单继承,不支持一个类继承多个类。但是一个类可以进行多层继承(即A继承于B,而C又继承于A,C通过A间接继承了B)

(3)子类继承父类非私有的属性和方法,可以通过$this关键字进行访问

(4)覆盖:子类中声明与父类相同名称的属性和方法,则该属性和方法会覆盖父类中的属性和方法,属性被覆盖后,无法访问父类中的属性,方法被覆盖后,可以通过parent::方法名()进行访问

3、多态

同一方法作用于不同对象时,产生不同的执行结果

多态存在的三个必要条件:继承、重写(子类继承父类后对父类方法进行重新定义)、父类引用指向子类对象

示例如下:

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)

依赖倒置简单地讲就是将依赖关系倒置为依赖接口,具体概念如下:

(1)上层模块不应该依赖于下层模块,它们共同依赖于一个抽象(父类不能依赖子类,它们都要依赖抽象类)。

(2)抽象不能依赖于具体,具体应该依赖于抽象。

5、接口隔离原则(ISP)

不同的模块要通过抽象接口隔离开,而不是通过具体的类强耦合。

PHP实战中知识总结