
上QQ阅读APP看书,第一时间看更新
3.5 继承性

在PHP中,对象的继承使用extends关键字实现,而且最多只能继承一个父类,PHP不支持多继承。继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。
3.5.1 类继承的应用
子类继承父类的所有成员和方法,包括构造函数。当子类实例化时,PHP会先查找子类中是否有构造函数,如果子类有自己的构造函数,PHP则会先调用子类的构造函数;如果子类没有自己的构造函数,则会调用父类的构造函数,这就是继承。
给子类使用extends关键字,让子类继承父类。例如下面代码:

【例3-9】(实例文件:ch03\Chap3.9.php)类继承的应用。

在IE浏览器中运行结果如图3-6所示。

图3-6 类继承的应用
3.5.2 私有属性的继承
类中的私有属性或者方法是不能被子类继承的。但是当父类中某个方法调用了父类中的私有属性或者方法时,该方法在被继承以后,将能继续通过$this访问父类中的私有属性或者方法。
【例3-10】(实例文件:ch03\Chap3.10.php)私有属性的继承。

在IE浏览器中运行结果如图3-7所示。

图3-7 私有属性的继承
3.5.3 子类中重载父类的方法
因为在PHP中不能存在同名的函数,所以在同一个类中也就不能定义重名的方法。本节所介绍的重载是指在子类中可以定义和父类同名的方法,从而覆盖从父类继承过来的方法。
包括构造函数在内,子类可以重新定义同名的类方法以覆盖父类的方法。在子类的构造函数中可使用parent::__construct()调用父类中的构造函数。
注意:除构造函数之外,其他函数在覆盖时,函数的参数列表必须相同。
【例3-11】(实例文件:ch03\Chap3.11.php)子类中重载父类的方法。

在IE浏览器中运行结果如图3-8所示。

图3-8 子类中重载父类的方法