PHP繼承

PHP繼承

這是一篇遲來的更新,由於它應該在前兩天就被更新了,可是因爲我英語四級沒過!沒過!沒過!致使我心情低落,因此就玩了幾天的遊戲,哦不,進行了幾天反思,痛定思痛 痛何如哉!php

如下都是我我的的理解,有錯的地方還望不吝賜教。
爲何須要繼承?
繼承就是 一個子類經過extends父類把父類的屬性和方法繼承下來。
假設如今如今須要寫兩個類,小學生類和高中生類,小學生會說話,走路,考試,高中生也會說話走路,考試,那麼若是你寫兩遍說話,走路,考試,那麼就會顯得臃腫,管理起來也會麻煩不少,若是定義一個類叫作學生類包含說話,走路,考試,而後讓小學生類和高中生類來繼承這個學生類就會顯得好不少,好比這樣。學習

<?php
class student{
    function speak(){
        echo '說話';
    }
    function walk(){
        echo '走路';
    }
    function test(){
        echo '考試';
    }
}
class pupil extends student{
    function test(){
        echo '小學生考試';
    }
}
class senior extends student{
    function test(){
        echo '高中生考試';
    }
}
$pupil=new pupil();
$pupil->speak();
$pupil->walk();
$pupil->test();
echo '<br />';
$senior=new senior();
$senior->speak();
$senior->walk();
$senior->test();
?>

輸出:code

說話走路小學生考試
說話走路高中生考試

這樣代碼管理起來就會好不少。
假設如今小學生要學習一個新的技能吃東西,我如今這樣寫。繼承

<?php
    class student{
        function speak(){
            echo '說話';
        }
        function walk(){
            echo '走路';
        }
        function test(){
            echo '考試';
        }
    }
    class skill{
        function eat(){
            echo '吃東西';
        }
    }
    class pupil extends student,skill{
        function test(){
            echo '小學生考試';
        }
    }
    $pupil=new pupil();
    $pupil->speak();
    $pupil->walk();
    $pupil->test();
    $pupil->eat();
?>

若是這樣寫,那麼就會報錯:遊戲

Fatal error: Class 'studentskill' not found in D:\xampp\htdocs\1.php on line 18

由於php中是不能這樣實現多繼承的,若是想要實現多繼承能夠這麼寫:io

<?php
        class student{
            function speak(){
                echo '說話';
            }
            function walk(){
                echo '走路';
            }
            function test(){
                echo '考試';
            }
        }
        class skill extends student{
            function eat(){
                echo '吃東西';
            }
        }
        class pupil extends skill{
            function test(){
                echo '小學生考試';
            }
        }
        $pupil=new pupil();
        $pupil->speak();
        $pupil->walk();
        $pupil->test();
        $pupil->eat();
?>

輸出:function

說話走路小學生考試吃東西

先用一個skill類繼承student類,而後再用pupil類繼承skill類,這樣就至關於pupil類繼承了student類和skill類。class

方法重寫
若是要實現的兩個類有共同特徵,那麼就能夠將這個共同的特徵抽象出一個父類。
好比,有小學生類和中學生類,這樣的兩個類,他們都是學生,那麼就能夠抽象出一個學生類,學生都會考試,那麼就把考試這個方法寫在學生這個類裏面。
那麼問題就是,小學生是小學生的考試,中學生是中學生的考試,我不可能都輸出考試,這裏就用到了方法重寫。
在子類中定義一個與父類同樣的方法,這樣執行的時候,父類中的方法就會被覆蓋,從而輸出的只有子類中定義的方法。
舉例:test

<?php
        class student{
            function test(){
                echo '考試';
            }
        }
        class pupil extends student{
            function test(){
                echo '小學生考試';
            }
        }
        class senior extends student{
            function test(){
                echo '中學生考試';
            }
        }
        $pupil=new pupil();
        $pupil->test();
        echo '<br />';
        $senior=new senior();
        $senior->test();
?>

輸出:nio

小學生考試
中學生考試
相關文章
相關標籤/搜索