原文地址:PHP設計模式(四):繼承php
在PHP設計模式(二):抽象類和接口以及PHP設計模式(三):封裝中,咱們已經見過繼承,也就是extends關鍵字。
和C/C++,Java,Python等語言同樣,PHP也支持繼承,並且和其餘語言沒有什麼區別。設計模式
仍是用動物、鯨魚和鯉魚來舉例:bash
<?php abstract class Animal { protected $name; protected function chew($food) { echo $this->name . " is chewing " . $food . ".\n"; } protected function digest($food) { echo $this->name . " is digesting " . $food . ".\n"; } } class Whale extends Animal { public function __construct() { $this->name = "Whale"; } public function eat($food) { $this->chew($food); $this->digest($food); } } class Carp extends Animal { public function __construct() { $this->name = "Carp"; } public function eat($food) { $this->chew($food); $this->digest($food); } } $whale = new Whale(); $whale->eat("fish"); $carp = new Carp(); $carp->eat("moss"); ?>
運行一下:this
$ php Inheritance.php Whale is chewing fish. Whale is digesting fish. Carp is chewing moss. Carp is digesting moss.
注意$this在Animal類、Whale類、Carp類中的用法。
上面的代碼看似常見,實則暗含玄機。對於一個好的程序設計,須要:設計
類和類之間應該是低耦合的。code
繼承一般是繼承自抽象類,而不是具體類。繼承
一般直接繼承抽象類的具體類只有一層,在抽象類中用protected來限定。接口
合理的繼承對於好的程序設計一樣是必不可少的,結合abstract和protected,能讓你編寫出結構清晰的代碼。get