這篇文章主要介紹了關於php物件導向之繼承,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
繼承
定義
子類繼承父類所有的——公有(public) 和 受保護(protected)屬性和方法。
使用關鍵字extends繼承,一個類整合另一個,不能繼承多個。
相關專業名詞
子類、父類、基類、超類、衍生類別
子類、衍生類別 ——> 繼承於基類的類;
父類、基類、超類指 ——> 被繼承的類。
例子
<?phpclass Father{ public $a = 'public'; protected $b = 'protected'; private $c = 'private'; public function func1() { echo 'This is public function','<br/>'; } protected function func2() { echo 'This is protected function','<br/>'; } private function func3() { echo 'This is private function','<br/>'; }}// 繼承父類class Child extends Father{ // 子類中調用繼承來的方法 public function test() { $this -> func1(); $this -> func2(); //$this -> func3(); 私人方法不可以調用 }}// 執行個體化子類$son = new Child();// 嘗試調用屬性echo $son -> a,'<br/>';//echo $son->b; 不能直接輸出b//echo $son -> c; 繼承都沒繼承,當然不能輸出// 嘗試調用方法//$son -> func1();//$son -> func2(); 不能在類外調用func2//$son -> func3(); 繼承都沒繼承,當然不能調用// 間接調用繼承自父類的普通方法$son -> test();
重寫
定義:
1)繼承父類的方法,子類中定義與父類同名的方法,且參數個數相同;
2)當子類重寫父類中的方法時,php不會調用父類中被重寫的方法;
3)是否調用父類的方法,取決於子類。
4)在實行方法覆蓋的時候,訪問修飾符可以是不一樣的,但是子類的存取範圍必須大於等於父類的存取範圍。
使用:
parent:: 訪問父類中被重寫的屬性和方法
例子
<?phpclass Father{ public function shuo($num) { echo 'a a o o'; }}class Son extends Father{ public function shuo($num) { // 調用父類中被重寫的方法 // parent::shuo($num); echo 'Hello World'; } public function test($num) { parent::shuo($num); }}// 執行個體化子類$son1 = new Son();$son1 -> shuo(1); // Hello World$son1 -> test(1); // a a o o
final關鍵字
如果父類中的方法被聲明為final,則子類無法複寫該方法。
如果一個類被聲明為final,則不能被繼承。
例子
<?phpclass Father{ final public function test() { echo 'hello'; }}class Son extends Father{ public function test() { echo '你好'; }}// 執行個體化子類$son1 = new Son();$son1 -> test(); // 報錯,函數不能被重寫