php類別的繼承用法實例詳解

伊谢尔伦
發布: 2023-03-12 07:40:01
原創
1396 人瀏覽過

PHP中,我時常會寫一個類,類寫了一個共用方法,然後讓子類去繼承就能得到對應的功能。假設大致上有這麼一個父類:

<?php
class Father{

    public function construct(){
        echo &#39;我是父类的构造方法!&#39;;
    }

    protected function say($str = &#39;Hello World!&#39;){
        echo &#39;说了一句话:&#39; . $str;
    }
}
?>
登入後複製

然後呢,搞一個子類去繼承他:

<?php

class chirld extends Father{

    public construct(){
        echo &#39;我是子类的构造方法~&#39;;
    }
}
登入後複製

此時你實例化子類,結果將會是我是子類別的建構方法~! 
當然,因為繼承關係,所以子類別是可以呼叫父類別的say()方法的。

如果你想實作父類別的建構方法,然而你又想實作子類別的建構方法,你可以這樣子去做:

<?php

class chirld extends Father{

    public construct(){
        parent::construct();
        echo &#39;我是子类的构造方法~&#39;;
    }
}

?>
登入後複製

這時候就會輸出我是父類別的建構方法!我是子類別的建構方法~

假設你在子類別中定義了這麼一個方法:

protected function say($str = &#39;&#39;){
   echo &#39;我是子类的say&#39;;
}
登入後複製

那麼,你此時從父類別繼承下來的sys()方法將會被重寫,所以呼叫後輸出的結果就是:我是子類別的say

如果你這樣定義會怎麼樣?

public function say($str = &#39;&#39;){
     echo &#39;我是子类的方法哦~&#39;;
}
登入後複製

這樣的寫法還是可以的。 PHP跟其他強類型語言不同的地方是,PHP重寫方法允許你對重寫的方法”向上公有化”,而不允許你”向下私有化”,就比如在這裡你定義為private 是肯定會報錯的,而像C++這樣語言確恰恰相反。

PHP的對於這種情況的想法是,你父親給了你受保護級別的遺產,此時在你手上是保護級別的,你父親允許你對對別人分享,也就是public,但不允許你自己藏起來,也就是private,自己獨吞肯定不行的。

此時你一定會問,那麼父類別的say()設定為private會怎麼樣? 
結果不會怎樣,就是父類別已經私有化了,子類別根本繼承不到,所以你在子類別中的say()方法隨你這麼定都可以。

還有一個問題,就是父類別已經定義了sys()中帶可選參數,那麼,在子類別中的你像下面這樣無參數定義會怎麼樣呢?

public function say(){
    echo &#39;哈哈。我没有参数了耶~&#39;;
}
登入後複製

結果還是可以正常運作的,只不過會有 E_STRICT等級的提示。原因在於PHP標準就是參數的數量必須跟父類別對齊,當然,可以在php.ini中進行錯誤等級設定。

以上是php類別的繼承用法實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!