7.6.1 PHP類的繼承

7.6.1 PHP類的繼承

繼承已為大家所熟知的一個(gè)程序設(shè)計(jì)特性俏蛮,PHP 的對象模型也使用了繼承撼泛。繼承將會(huì)影響到類與類冷离,對象與對象之間的關(guān)系吵冒。
比如,當(dāng)擴(kuò)展一個(gè)類西剥,子類就會(huì)繼承父類的所有公有和保護(hù)方法痹栖。但是子類的方法會(huì)覆蓋父類的方法。
繼承對于功能的設(shè)計(jì)和抽象是非常有用的瞭空,而且對于類似的對象增加新功能就無須重新再寫這些公用的功能揪阿。
php繼承的關(guān)鍵字:extends
格式:
[修飾符] class 子類名 extends 父類名{ ... }

通過繼承可以簡化類的定義。

class Person{
        public $name;
        public $age;
        function getInfo(){...}
}

class Student{
        public $name;
        public $age;
        public $school;
        function getInfo(){...}
        function study(){...}
}
使用繼承后的效果:
class Person{
        public $name;
        public $age;
        function getInfo(){...}
}
class Student extends Person{
        public $school;
        function study(){...}
}

PHP只支持單繼承咆畏,不允許多重繼承南捂。一個(gè)子類只能有一個(gè)父類,不允許一個(gè)類直接繼承多個(gè)類旧找,但一個(gè)類可以被多個(gè)類繼承溺健。
可以有多層繼承,即一個(gè)類可以繼承某一個(gè)類的子類钮蛛,如類B 繼承了類A鞭缭,類C又繼承了類B,那么類C也間接繼承了類A魏颓,
  class A{
     ....
  }
  class B  extends A{
     ....
  }
  class C  extends B{
     ....
  }

子類與父類的屬性與方法

子類繼承父類的所有內(nèi)容岭辣,但父類中的private部分不能直接訪問
子類中新增加的屬性和方法是對父類的擴(kuò)展
子類中定義的與父類同名的屬性是對父類屬性的覆蓋,同名的方法也是對父類方法的覆蓋

訪問類型控制

訪問權(quán)限:
private protected public(默認(rèn)的)


在同一類中: 可以 可以 可以
類的子類中: X 可以 可以
其他外部類中: X X 可以

定義一個(gè)父類(基類)
<?php
    //聲明一個(gè)人類甸饱,定義人所具有的一些其本的屬性和功能成員沦童,作為父類 
    class Person {                      
        var $name;                      //聲明一個(gè)存儲(chǔ)人的名字的成員
        var $sex;                       //聲明一個(gè)存儲(chǔ)人的性別的成員
        var $age;                       //聲明一個(gè)存儲(chǔ)人的年齡的成員
        
        function __construct($name="", $sex="男", $age=1) {        
            $this->name = $name;                    
            $this->sex = $sex;                      
            $this->age = $age;                      
        }
        function say(){                 
            echo "我的名字:".$this->name.",性別:".$this->sex.",年齡:".$this->age."搞动。<br>";
        }   
        
        function run() {                
            echo $this->name."正在走路躏精。<br>";
        }
    }
<?php
    //聲明一個(gè)類作為父類使用,將它的成員都聲明為保護(hù)的
    class MyClass {                         
        protected $var1=100;               //聲明一個(gè)保護(hù)的成員屬性并給初值為100
        protected function printHello() {   //聲明一個(gè)成員方法使用protected關(guān)鍵字設(shè)置為保護(hù)的
            echo "hello<br>";                  //在方法中只有一條輸出語句作為測試使用
        }
    }
    //聲明一個(gè)MyClass類的子類試圖訪問父類中的保護(hù)成員
    class MyClass2 extends MyClass {     
        //在類中聲明一個(gè)公有方法鹦肿,訪問父類中的保護(hù)成員
        function useProperty() {
            echo "輸出從父類繼承過來的成員屬性值".$this->var1."<br>";  //訪問父類中受保護(hù)的屬性
            $this->printHello();                 //訪問父類中受保護(hù)的方法
        }
    }
    $subObj = new MyClass2();          //初始化出子類對象
    $subObj->useProperty();               //調(diào)用子類對象中的方法實(shí)現(xiàn)對父類保護(hù)的成員訪問
    echo $subObj->var1;                    //試圖訪問類中受保護(hù)的成員矗烛,結(jié)果出錯(cuò)

子類中重載父類的方法

在子類里面允許重寫(覆蓋)父類的方法
在子類中,使用parent訪問父類中的被覆蓋的屬性和方法
parent::__construce();
parent::fun();

<?php
    class Person {                      
        protected $name;            
        protected $sex;                     
        public function __construct($name=“”, $sex=“男”) {  ...屬性賦值 }
        public function say(){ ...輸出屬性信息 }   
    }
   class Student extends Person {  //聲明學(xué)生類箩溃,使用extends繼承Person類
        private $school;            
         //構(gòu)造方法重寫(覆蓋)
        public function __construct($name="", $sex="男", $school="") {   
            parent::__construct($name,$sex);   //調(diào)用父類構(gòu)造方法瞭吃,初始化父類
            $this->school = $school;                  //新添加一條為子類中新聲明的成員屬性賦初值
        }
        public function say( ) {                        //方法重寫(覆蓋)
            parent::say();                                    //調(diào)用父類中被本方法覆蓋掉的方法
            echo "在".$this->school."學(xué)校上學(xué)<br>";    //在原有的功能基礎(chǔ)上多加一點(diǎn)功能
        }   
    }
$student = new Student("張三","男",20, "edu");  //創(chuàng)建學(xué)生對象,并多傳一個(gè)學(xué)校名稱參數(shù)    
$student->say();                                                 //調(diào)用學(xué)生類中覆蓋父類的說話方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涣旨,一起剝皮案震驚了整個(gè)濱河市歪架,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霹陡,老刑警劉巖和蚪,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烹棉,居然都是意外死亡攒霹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門浆洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催束,“玉大人,你說我怎么就攤上這事伏社】俅蹋” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵摘昌,是天一觀的道長速妖。 經(jīng)常有香客問我,道長第焰,這世上最難降的妖魔是什么买优? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮挺举,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烘跺。我一直安慰自己湘纵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布滤淳。 她就那樣靜靜地躺著梧喷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铺敌,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天汇歹,我揣著相機(jī)與錄音,去河邊找鬼偿凭。 笑死产弹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弯囊。 我是一名探鬼主播痰哨,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匾嘱!你這毒婦竟也來了斤斧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤霎烙,失蹤者是張志新(化名)和其女友劉穎撬讽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悬垃,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡游昼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盗忱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酱床。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖趟佃,靈堂內(nèi)的尸體忽然破棺而出扇谣,到底是詐尸還是另有隱情,我是刑警寧澤闲昭,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布罐寨,位于F島的核電站,受9級特大地震影響序矩,放射性物質(zhì)發(fā)生泄漏鸯绿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一簸淀、第九天 我趴在偏房一處隱蔽的房頂上張望瓶蝴。 院中可真熱鬧,春花似錦租幕、人聲如沸舷手。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽男窟。三九已至盆赤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歉眷,已是汗流浹背牺六。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汗捡,地道東北人淑际。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像凉唐,于是被迫代替她去往敵國和親庸追。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法台囱,類相關(guān)的語法淡溯,內(nèi)部類的語法,繼承相關(guān)的語法簿训,異常的語法咱娶,線程的語...
    子非魚_t_閱讀 31,661評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)强品,斷路器膘侮,智...
    卡卡羅2017閱讀 134,696評論 18 139
  • 一夫晌、繼承 當(dāng)兩個(gè)事物之間存在一定的所屬關(guān)系雕薪,即就像孩子從父母那里得到遺傳基因一樣,當(dāng)然晓淀,java要遺傳的更完美所袁,這...
    玉圣閱讀 1,054評論 0 2
  • 二年前,才知道有人是通過微信朋友圈的內(nèi)容來了解人的凶掰。我認(rèn)為這個(gè)工具燥爷,只能了解事,無法了解人懦窘。 大概前翎,這幾年,才聽到...
    生活的雨滴閱讀 263評論 0 0
  • 1 讀書自學(xué): 筆者買的投資類書籍近千本畅涂,一個(gè)原則是基本不買國內(nèi)作者的書鱼填。國內(nèi)的書大概不超過10本。有些國外的書沒...
    璋小強(qiáng)閱讀 1,378評論 0 0