首頁 >後端開發 >php教程 >PHP中物件導向之繼承

PHP中物件導向之繼承

易达
易达原創
2020-05-24 15:52:421801瀏覽

本文目標:

1、了解繼承的定義

2、掌握繼承的好處

(一)、定義

#         PHP中物件導向之繼承

我們仔細看上面一張圖,然後做一件事情,找出他們的共同點

共同點: 

#1、都擁有部分相同的屬性和方法

2、他們都是人

按照正常類的定義走,我們要實現以上2個類,我們得分別定義NBA球員這個類別的所有屬性和方法,然後定義女主播類別的時候,還得寫一遍重複的姓名,身高,體重等屬性和吃飯的方法,如果又有一個類別例如叫學生,那意味著這些共同的屬性和共同的方法又得重複寫一遍,以此類推,程式碼會有很多地方類似,這樣增加的程式碼的冗餘性,所以為了解決這種冗餘性,為了讓程式碼更簡潔,可重複使用性高,我們可以把這些共同的屬性和方法都寫到一塊去,然後讓每個類別都去調用這個公共的屬性和方法,這樣維護起來是不是就更加方便了,而且程式碼也更加簡潔了,那麼這種做法我們就叫做繼承

具體怎麼做的呢,如下圖

       PHP中物件導向之繼承

我們先創建了一個「人」的類,讓這個人都有2個類別都有的屬性與方法,再讓NBA球員和女主播都繼承「人」 這個類別

        PHP中物件導向之繼承

概念:被繼承的類別叫父類,例如人,繼承的類別叫子類別

總結:什麼是繼承,繼承是一種方法,用來提高程式碼的可重複使用性和減少程式碼的冗餘性,就像現實生活中的遺傳一樣,子女都會繼承父母的部分基因,所以你一生下來你就是有人類的共同屬性和行為 

(二)、繼承的好處

1、提高程式碼的重用性,節約了程式設計的時間和代價

父類別中定義的屬性和方法就不需要子類中重複定義,子類只要繼承了父類,就擁有了父類中所有的屬性和方法

#2、對於同一個父類下的所有子類,調用他們的時候可以一視同仁

例如不管是NBA球員還是女主播,因為他們都是人,所以我們呼叫他們的時候可以直接呼叫父類的方法,比如吃飯,而不用管這個類到底是NBA球員還是女主播

3、子類別可以修改調整父類別定義的類別成員

a、我們稱為重寫(Overwrite)

b、一旦子類別修改好了,就依照子類別定義的方法執行

這相當於變異

學習任何東西我們既要知道其理論,還要有相關的理論實踐,其實所有的理論都是實踐得出來的,所以有的時候我一再強調,理論雖然很抽象,但是大家有了一定的實踐經驗後也要進行總結,總結一些言簡意賅,通俗易懂的“理論”,這個習慣培養好了以後,我相信許多知識大家能夠了解的更加透徹,同時更容易抓住事情的本質,這樣分析問題的能力也會提升。

好了,既然要理論和實踐結合,那麼接下來,我們透過程式碼進行實操演示,看看程式碼中具體是怎麼實現繼承的

 (三)、具體程式碼

<?php
/***
 * 案例目标
 * 1.掌握继承的定义
   2.掌握继承的好处
 */
 //定义一个“人”类
class Human{
    public $name = "";//姓名
    public $height = "";//身高
    public $weight = "";//体重

    public function eat($food){
        echo $this->name."在吃".$food."<br/>";
    }
}
//女主播
class Anchors extends Human{
    public $name = "";
    public $stageName = "";
    public function __construct( $name,$stageName ){
        $this->name = $name;
        $this->stageName = $stageName;
    }
    public function singing(){
        echo "我是女主播,我会唱歌<br/>";
    }
    //重写方法eat
    public function  eat($food){
        echo "我是女主播,我是边唱歌边吃{$food}<br/>";
    }
}
//Nba球员类
 class NbaPlayer extends Human{
   //因为父类已经有了,所以就不需要再写了,通过extends来实现
    // public $name  = "";//姓名
    // public $height = "";//身高
    // public $weight = "";//体重

    public $team = "";//团队
    public $playerName = "";//球员号码

    public function __construct( $name,$height,$weight,$team,$playerName ){
        $this->name = $name;
        $this->height=$height;
        $this->weight = $weight;
        $this->team = $team;
        $this->playName = $playerName;
        echo "构造函数执行了,当前对象是{$this->name}<br/>";
    }
    
   
   //跑步
    public function run(){
        echo "跑步中<br/>";
    }
    //跳跃
    public function jump(){
        echo "跳跃<br/>";
    }
    //运球
    public function dribble(){
        echo "运球<br/>";
    } 
    //传球
    public function pass(){
        echo "传球<br/>";
    }
    //投篮
    public function shoot(){
        echo "投篮<br/>";
    }
    //扣篮
    public function dunk(){
        echo "扣篮<br/>";
    }
    //重写方法eat ,只要名称和父类一样就是代表重写了不一定参数也要保持一样
    public function eat($food){
        echo "我是Nba球员,我是站着吃饭,边吃{$food}边看球赛<br/>";
    }
 }
 //测试,NBA球员,没有直接定义name,身高,体重,现在输出一下看结果有没有
 //创建乔丹对象
 $jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");
 //输出乔丹对象
 echo "名称= ".$jordon->name."<br/>";

 //测试,NBA球员,没有直接定义eat方法,现在输出一下看结果有没有
 echo $jordon->eat("苹果");
 //证明第二个好处,只要是个人就可以调用它的eat方法
 $linda = new Anchors("琳达","LD");
 echo $linda->eat("苹果");
 //测试第三个好处是否真实
 //思路1.为女主播和NBA球员2个类分别重写eat方法
//    2.再次执行2个对象的eat方法
//  会发现一旦子类重写了父类的方法,那么就会调用子类自己的方法了,这里就大家自己写下,因为上面我已经调用了eat方法,一旦重写了,上面的结果会变

?>

透過上述程式碼的演示,我們總結一下:

 1、extends 就是繼承,透過這個關鍵字可以實現子類別繼承父類,共享父類的所有屬性和方法

 2、繼承代碼的其他特點:

● 在子類構造函數中也可以直接透過$this->來存取

● 在php中extends 後面只能繼承一個類,不能用,來實現繼承多個類,否則會報錯

總結:

本文其實目標只有2個,知道繼承的定義和好處,最後我們透過程式碼相信對繼承的好處有了更深的體會和理解

以上是PHP中物件導向之繼承的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn