面向对象基本特征:
封装
隔离性:
被封装后的对象,其外部对象是无法直接访问对象的内部实现细节,内部实现细节的的改动不会影响到外部对象的访问原则(即:对象内部修改后,在公开暴露指定的访问路径不变的情况下,外部访问它的对象是无需修改的),这是隔离性的体现,同时也是实现高内聚,低耦合的最根本的思想之一;
可复用性:
被封装后的对象可以被外部多个对象访问,而无需为每个外部对象去指定不同的服务对象;减少代码的冗余。
可读性:
合理设置被封装的对象名称,可增强代码的可读性,通过方法名或者类名即可了解其作用。
继承
PHP中主要通过extends关键字来实现继承: class Student extends Person{}
PHP只能单继承,不支持一个类继承多个类。但是一个类可以进行多层继承(即A继承于B,而C又继承于A,C通过A间接继承了B)
子类继承父类非私有的属性和方法,可以通过$this关键字进行访问
覆盖:子类中声明与父类相同名称的属性和方法,则该属性和方法会覆盖父类中的属性和方法,属性被覆盖后,无法访问父类中的属性,方法被覆盖后,可以通过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)
不同的模块要通过抽象接口隔离开,而不是通过具体的类强耦合。
评论