首頁  >  文章  >  後端開發  >  php物件導向重寫與重載是什麼?它們的用法有什麼要求

php物件導向重寫與重載是什麼?它們的用法有什麼要求

伊谢尔伦
伊谢尔伦原創
2017-07-08 09:35:481597瀏覽

重寫:

就是當子類別繼承父類別的一些方法後,子類別又在其內部定義了相同的方法,則這個新定義的方法會覆寫繼承而來的父類別的方法,子類別只能呼叫其內部定義的方法。

有以下幾點要求:

1.當一個父類別和子類別有一個方法,參數和名字完全一致,那麼子類別方法會覆寫父類別的方法。

必須參數一致,才會實作方法覆寫。當參數個數不一致,則會報錯(這就牽扯到上面說所得方法重載)。當方法名字不一致,就不會覆蓋,只是子類別新定義的方法。

2.在實施方法覆蓋的時候,存取修飾符可以是不一樣的,但是子類別的存取範圍必須大於等於父類別的存取範圍。

這是php這些語言設計時的規定吧。我是這麼理解的是訪問高一層的東西比較容易,如果再去訪問底層的東西權限肯定要高一些。

要求參數和名字一樣。並不是要求子類,父類名稱相同。

是要求參數和名字一樣,具體就是要求參數的數量與父類別相同,而並不是參數名稱一致。即傳遞的參數名字可以為任意,只要保證傳遞的個數相同即可。

看程式碼:

<?php
class  shao
{
    public function sasa($name){
        echo $name,&#39;狗!<br/>&#39;;
    }
}
class zhen extends shao{
    public function aaa()
    {
        echo &#39;猫<br/>&#39;;
    }
}
$lli = new zhen();
$lli->aaa();
$lli->aaa(&#39;binghh&#39;);
?>
<?php
class fu
{
    public function text(){
        echo &#39;父类&#39;;
    }
    public  function  textt(){
        echo &#39;父亲&#39;;
}
}
class erzi extends fu{
    public function text()
    {
        parent::text();//我要父类的东西
        echo &#39;儿子&#39;;//重写

    }
}
$shili = new fu();
$erzi = new erzi();
$erzi->text();
?>

重載:

#重載是類別的多態的一種實作。 函數重載指一個標識符被用作多個函數名,並且能夠透過函數的參數個數或參數型別將這​​些同名的函數區分開來,呼叫不發生混淆。即當呼叫的時候,雖然方法名字相同,但根據參數的不同可以自動呼叫對應的函數。

php不好實作。

可以讓類別裡面的某個方法產生多種效果,根據傳入參數不同,可以執行不同的邏輯。

有以下幾點要求:

1、在使用重載時只能透過相同的方法名稱、不同的參數形式實作。不同的參數類型可以是不同的參數類型,不同的參數個數,不同的參數順序(參數類型必須不一樣);
2、不能透過存取權限、傳回類型、拋出的例外進行重載;
3、方法的例外類型和數目不會對重載造成影響;

<?php
class fu
{
    public function text(){
        echo &#39;父类&#39;;
    }
    public  function  textt(){
        echo &#39;父亲&#39;;
    }
}
class erzi extends fu
{

        function test($name)
        {
            //方法重载
            parent::text();//我要父类的东西
            echo "erzi",$name;//重写

        }
    }

$erzi = new fu();
$erzi-> text("123");
?>

重寫只存在於子類別與父類別中,而重載存在於一個類別中。

override是重寫

overload是重載

以上是php物件導向重寫與重載是什麼?它們的用法有什麼要求的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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