![PHP 从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/705/27111705/b_27111705.jpg)
上QQ阅读APP看书,第一时间看更新
3.5 继承性
![](https://epubservercos.yuewen.com/B097BE/15477656605638806/epubprivate/OEBPS/Images/Figure-P64_8033.jpg?sign=1739311888-39hY6PmrCXQaJfo5XxXy0xATV4aTRKZe-0-1ab751cc7365496c1e6d9004f1d56dc6)
在PHP中,对象的继承使用extends关键字实现,而且最多只能继承一个父类,PHP不支持多继承。继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。
3.5.1 类继承的应用
子类继承父类的所有成员和方法,包括构造函数。当子类实例化时,PHP会先查找子类中是否有构造函数,如果子类有自己的构造函数,PHP则会先调用子类的构造函数;如果子类没有自己的构造函数,则会调用父类的构造函数,这就是继承。
给子类使用extends关键字,让子类继承父类。例如下面代码:
![](https://epubservercos.yuewen.com/B097BE/15477656605638806/epubprivate/OEBPS/Images/Figure-P65_73809.jpg?sign=1739311888-ULsGqqPUPpFbE4EpTcHWAHYblufdGPgN-0-5202b8959819f84fa11f1a262d724dcb)
【例3-9】(实例文件:ch03\Chap3.9.php)类继承的应用。
![](https://epubservercos.yuewen.com/B097BE/15477656605638806/epubprivate/OEBPS/Images/Figure-P65_73811.jpg?sign=1739311888-REtn4ObPIbbB4MQY69aPnSe5kJrgOHNe-0-64c51cf9d9b573b8d1e5b459f065dacb)
在IE浏览器中运行结果如图3-6所示。
![](https://epubservercos.yuewen.com/B097BE/15477656605638806/epubprivate/OEBPS/Images/Figure-P65_73803.jpg?sign=1739311888-tWIIBYEpDYWTYgcSCydgJdE7fIxxJEud-0-18a2ac9f4dd1c901093828e5844b0dde)
图3-6 类继承的应用
3.5.2 私有属性的继承
类中的私有属性或者方法是不能被子类继承的。但是当父类中某个方法调用了父类中的私有属性或者方法时,该方法在被继承以后,将能继续通过$this访问父类中的私有属性或者方法。
【例3-10】(实例文件:ch03\Chap3.10.php)私有属性的继承。
![](https://epubservercos.yuewen.com/B097BE/15477656605638806/epubprivate/OEBPS/Images/Figure-P65_73808.jpg?sign=1739311888-4jBNSsOddToXhojE9XSDuegDHtgZOZ6T-0-8aaf7b6e3c0a8822fda0db0b7407baf0)
在IE浏览器中运行结果如图3-7所示。
![](https://epubservercos.yuewen.com/B097BE/15477656605638806/epubprivate/OEBPS/Images/Figure-P66_8534.jpg?sign=1739311888-YjHzfhgAdL4KJ7DtVJ6WpKIybyd26LM3-0-f58cd993250490c713e856069b79eca7)
图3-7 私有属性的继承
3.5.3 子类中重载父类的方法
因为在PHP中不能存在同名的函数,所以在同一个类中也就不能定义重名的方法。本节所介绍的重载是指在子类中可以定义和父类同名的方法,从而覆盖从父类继承过来的方法。
包括构造函数在内,子类可以重新定义同名的类方法以覆盖父类的方法。在子类的构造函数中可使用parent::__construct()调用父类中的构造函数。
注意:除构造函数之外,其他函数在覆盖时,函数的参数列表必须相同。
【例3-11】(实例文件:ch03\Chap3.11.php)子类中重载父类的方法。
![](https://epubservercos.yuewen.com/B097BE/15477656605638806/epubprivate/OEBPS/Images/Figure-P66_73815.jpg?sign=1739311888-SINHwXjWmQtQD5tTvbzYP2B6ufFk0Ukw-0-366b8f62fdaab58cf9525818ec355cb6)
在IE浏览器中运行结果如图3-8所示。
![](https://epubservercos.yuewen.com/B097BE/15477656605638806/epubprivate/OEBPS/Images/Figure-P67_8541.jpg?sign=1739311888-CssBFbmyIE8JeceMLQjyRZQDEXPgLjkd-0-a717c90ee0bc0068751191de4247e922)
图3-8 子类中重载父类的方法