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、實現(xiàn)方法覆蓋時,訪問修飾符可以不一樣,但是必須滿足子類的訪問范圍>=父類的訪問范圍。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,462評論 2 378

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

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