php面向?qū)ο笕筇卣鞣庋b春寿、多態(tài)、繼承

一忽孽、php面向?qū)ο蟮娜筇卣鳎?br> 1绑改、封裝:
封裝就是把抽象出的數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護(hù)在內(nèi)部兄一,程序的其他部分只有通過被授權(quán)的操作(成員方法)才能對數(shù)據(jù)進(jìn)行操作厘线。

訪問控制符.png
訪問控制符.png
訪問控制符賦值取值.png

2、繼承:
所謂繼承出革,就是一個子類通過extends 父類 把父類的一些(public / protected)屬性和(public / protected)方法繼承下來造壮。不能繼承私有的。

  作用:增加代碼復(fù)用性骂束,管理代碼成本低费薄。
 
  基本語法:
  class 類名 extends 父類名 {
        //需要的非私有屬性和方法
  }
繼承.png
<?php
    
    //父類
    Class Student {
        public $name;
        protected $age;
        protected $grade;

        // public __construct() {

        // }

        public function showInfo() {
            echo $this -> name."<br/>".$this -> age;
        }
    }

    /**
    * 小學(xué)生
    */
    class Pupil extends Student
    {
        public function test() {
            echo "<br/>小學(xué)生在考試。栖雾。楞抡。";
        }
    }

    /**
    * 大學(xué)生
    */
    class Graduate extends Student
    {
        public function test() {
            echo "<br/>大學(xué)生在考試。析藕。召廷。";
        } 
    }

    $stu1 = new Pupil();
    $stu1 -> name = "lizzy";
    $stu1 -> test();
    $stu1 -> showInfo();

    $stu2 = new Graduate();
    $stu2 -> name = "zxm";
    $stu2 -> test();
    $stu2 -> showInfo();
?>

注意:
(1)protected屬性和方法受保護(hù),在子類不能直接調(diào)用,要在子類中定義方法訪問竞慢。

Class ParentClass {
    public $name = 'lizzy';
    protected $age = 24;
    private $sex = "女";

    public function test1() {
        echo "<br/>展示public方法";
    }

    protected function test2() {
        echo "<br/>展示protected方法";
    }

    private function test3() {
        echo "<br/>展示private方法";
    }
}

Class SubClass extends ParentClass {
    function show() {
        echo "age=".$this->age;
        // echo "sex=".$this->sex;//是不能繼承下來的
        $this -> test2();
    }
}

$sub1 = new SubClass();
$sub1 -> show();
$sub1 -> test1();

(2)如果希望子類調(diào)用父類的構(gòu)造方法先紫,或者其他方法(public / protected),可以使用類名::方法名; 或者parent::方法名;

Class A {
    public $n1=90;

    public function __construct() {
        echo "A的構(gòu)造方法";
    }
}

Class B extends A {
    function __construct() {
        echo "B的構(gòu)造方法";
        //調(diào)用父類的兩種方法
        // A::__construct();
        parent::__construct();
    }
}
$b = new B(); 

(3)當(dāng)一個子類的方法和父類方法(protected/public)完全一致時筹煮,我們稱之為方法的覆蓋(重寫)遮精。

3、多態(tài):
“重載”是類的多態(tài)的一種表現(xiàn)败潦;
重載的概念:函數(shù)名一樣本冲,通過函數(shù)的參數(shù)個數(shù)或者參數(shù)類型不同,達(dá)到調(diào)用同一個函數(shù)名劫扒,但是可以區(qū)分不同的函數(shù)檬洞。

魔法函數(shù)__call,但不推薦使用沟饥; 它一個對象調(diào)用某個方法添怔,而該方法不存在,則系統(tǒng)會自動調(diào)用__call贤旷。

<?php

    Class A {

        public function test1($p) {
            echo "接收一個參數(shù)<br/>";
        }

        public function test2($p) {
            echo "接收兩個參數(shù)<br/>";
        }

        //提供__call 它一個對象調(diào)用某個方法广料,而該方法不存在,則系統(tǒng)會自動調(diào)用__call
        function __call($method,$p) {
            if ($method == "test") {
                if (count($p) == 1) {
                    $this -> test1($p);
                } elseif (count($p) == 2) {
                    $this -> test2($p);
                }
            }
        }
    }

    $a = new A();
    $a -> test(1);
    $a -> test(21,43)
?>

常見魔法常量:兩個下劃線LINE兩個下劃線;當(dāng)前多少行幼驶;
兩個下劃線FILE兩個下劃線;當(dāng)前文件的絕對路徑艾杏;

方法的重寫/覆蓋(override):
1、當(dāng)一個父類知道所有的子類都有一個方法县遣,但是父類不能確定該方法究竟如何寫糜颠,可以讓子類去覆蓋這個方法。
使用如下:

<?php

    Class Animal {
        function cry() {
            echo "不知道怎么叫";
        }
    }

    //重寫
    Class Dog extends Animal {
        function cry() {
            echo "小狗汪汪叫";
        }
    }

    //重寫
    Class Pig extends Animal {
        function cry() {
            echo "小豬哼哼叫";
        }
    }

    $dog = new Dog();
    $dog -> cry();
    $pig = new Pig();
    $pig -> cry();

?>

方法重寫的細(xì)節(jié):
1萧求、重寫子類的函數(shù)名和參數(shù)個數(shù)必須和父類的一致其兴;但不要求參數(shù)的名稱一樣。
2夸政、如果子類要去調(diào)用父類的某個方法(public / protected)可以使用parent::方法名(); 或者父類名::方法名(); 可根據(jù)情況是否傳參元旬。
3、實(shí)現(xiàn)方法覆蓋時守问,訪問修飾符可以不一樣匀归,但是必須滿足子類的訪問范圍>=父類的訪問范圍。

多態(tài)體現(xiàn)的地方:
當(dāng)子類沒有覆蓋父類的方法耗帕,則子類調(diào)用的是父類穆端,當(dāng)子類覆蓋了父類的方法則調(diào)用的是自己的方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仿便,一起剝皮案震驚了整個濱河市体啰,隨后出現(xiàn)的幾起案子攒巍,更是在濱河造成了極大的恐慌,老刑警劉巖荒勇,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柒莉,死亡現(xiàn)場離奇詭異,居然都是意外死亡沽翔,警方通過查閱死者的電腦和手機(jī)兢孝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仅偎,“玉大人跨蟹,你說我怎么就攤上這事∩谒蹋” “怎么了喷市?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵相种,是天一觀的道長威恼。 經(jīng)常有香客問我,道長寝并,這世上最難降的妖魔是什么箫措? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮衬潦,結(jié)果婚禮上斤蔓,老公的妹妹穿的比我還像新娘。我一直安慰自己镀岛,他們只是感情好弦牡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漂羊,像睡著了一般驾锰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上走越,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天椭豫,我揣著相機(jī)與錄音,去河邊找鬼旨指。 笑死赏酥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谆构。 我是一名探鬼主播裸扶,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搬素!你這毒婦竟也來了呵晨?” 一聲冷哼從身側(cè)響起瞬项,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎何荚,沒想到半個月后囱淋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡餐塘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年妥衣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戒傻。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡税手,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出需纳,到底是詐尸還是另有隱情芦倒,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布不翩,位于F島的核電站兵扬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏口蝠。R本人自食惡果不足惜器钟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妙蔗。 院中可真熱鬧傲霸,春花似錦、人聲如沸眉反。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寸五。三九已至梳凛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間播歼,已是汗流浹背伶跷。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秘狞,地道東北人叭莫。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像烁试,于是被迫代替她去往敵國和親雇初。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理减响,服務(wù)發(fā)現(xiàn)靖诗,斷路器郭怪,智...
    卡卡羅2017閱讀 134,699評論 18 139
  • 1.面向?qū)ο笕筇匦?-封裝性 -繼承性 -多態(tài)性 2.什么是封裝 封裝性就是隱藏實(shí)現(xiàn)細(xì)節(jié),僅對外公開接口促绵。 3....
    夢夜繁星閱讀 1,094評論 0 6
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法攒庵,類相關(guān)的語法,內(nèi)部類的語法败晴,繼承相關(guān)的語法浓冒,異常的語法,線程的語...
    子非魚_t_閱讀 31,662評論 18 399
  • 轉(zhuǎn)發(fā):http://www.virtualhu.com/?p=9
    草市閱讀 96評論 0 0