91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP類方法的重寫原則

發布時間:2020-11-02 10:55:03 來源:億速云 閱讀:171 作者:小新 欄目:編程語言

小編給大家分享一下PHP類方法的重寫原則,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

PHP類方法重寫原則:1、final修飾的類方法不可被子類重寫;2、PHP是否重寫父類方法只會根據方法名是否一致判斷;3、重寫時訪問級別只可以等于或者寬松于父類,不可提升訪問級別。

PHP類方法重寫原則:

1、final修飾的類方法不可被子類重寫

final修飾的類方法不可被子類重寫 即便final private方法無法被繼承 子類仍不能對齊進行重寫

class FinalMethod
{
    //可繼承不可重寫
    final public function finalPublic()
    {
        echo "can be inherited, but be overrided";
    }
    //可繼承不可重寫
    final protected function finalProtected()
    {
        echo "can be inherited, but be overrided";
    }
    //不可繼承不可重寫 雖然子類繼承不到父類的private方法 但同時也會被final限制無法重寫
    final private function finalPrivate()
    {
        echo "can not be inherited or be overrided";
    }
    //雖然不可繼承 但子類里可重寫此方法
    private function private()
    {
        echo "can not be inherited ,but be overrided";
    }
}
class Override extends FinalMethod
{
    //error
    public function finalPublic()
    {
    }
    //error
    protected function finalProtected()
    {
    }
    //error
    private function finalPrivate()
    {
    }
    //correct
    public/protected/private function private()
    {
        //子類繼承父類重寫父類方法時訪問級別只能更加寬松 不可更為嚴格
    }
}

2、PHP是否重寫父類方法只會根據方法名是否一致判斷(5.3以后重寫父類方法參數個數必須一致)

這里并不是說方法參數無任何作用 PHP無重載機制 所以判斷是不是重寫只會通過方法名(C/C++不僅要方法名相同,參數也相同時才被視為重寫,否則即為重載,即新定義了一個多態函數的態) 當方法名相同時即被認為是在重寫父類方法,5.2可以參數不同,5.3以后參數需和父類方法一致,且都追尋繼承訪問級別的規則。

class Father
{
    public function index($args_1)
    {
    }
}
class Child extends Father
{
    //5.3以后重寫方法必須與父類保持參數個數相同
    public function index($args_1, $args_2)
    {
        //在C/C++中此為重載非重寫,因為C/C++具有標準的多態機制,會因參數不同而視為某一方法的另一種態
        //but在php中此依然為重寫 但5.3以后此為非法 必須與父類的方法參數個數保持一致
    }
    //5.3以后重寫方法必須與父類保持參數個數相同
    private function index($args_1, $args_2)
    {
        //C/C++會因為參數不同于父類方法而視為重載,即新定義了一個函數的態,所以不會受到繼承訪問權限的限制
        //但php仍然會被視為對父類方法的重寫,會受到繼承訪問權限的升降規則限制
    }
}

3、重寫時訪問級別只可以等于或者寬松于父類 不可提升訪問級別

父類的public方法不能被子類重寫為protected或者private,protected方法不能被重寫為private,可以寬松er,不可以嚴格er

class Father
{
    public function index()
    {
    }
}
class Child extends Father
{
    protected/private function index()
    {
       //訪問權限提升 錯誤
       //父類為public 則子類重寫也只能為public
       //父類為protected 則子類可為public/protected
       //父類為private 則子類public/protected/private皆可
    }
}

其實關于訪問級別繼承規則有很多有趣的地方

private在我們常識中是無法被繼承的,子類拿不到,但其訪問級別已是最高,所以你在子類中可以寫成private protected public 仿佛是我們自己重新定義了一個函數一樣,這點在5.2版本之前尤其突出,因為5.2之前的版本在繼承重寫父類方法是可以不保持參數個數相同,但5.3以后加強了這方面的限制,參數個數必須與父類相同

注:

子類實現父類的抽象方法或某類實現接口的方法時其實仍屬于繼承關系,仍追尋訪問等級只能降低不可提升的規則

而且

抽象方法不可被聲明為private,abstract修飾的方法肯定是用于繼承實現的,所以只能是public或者protected 接口的方法聲明必須為public,interface里聲明的方法也肯定是被繼承實現的,且只能是public, implements  此接口的類也指定重寫成public類型的方法

看完了這篇文章,相信你對PHP類方法的重寫原則有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

重庆市| 若尔盖县| 山阴县| 冕宁县| 东城区| 文水县| 乌拉特中旗| 库伦旗| 全南县| 娱乐| 铜川市| 内乡县| 孟村| 望城县| 涿州市| 顺昌县| 隆德县| 西城区| 凤城市| 兰西县| 百色市| 精河县| 通榆县| 茂名市| 綦江县| 滨州市| 赣州市| 阿拉善右旗| 呼伦贝尔市| 五河县| 临西县| 班戈县| 邛崃市| 浮梁县| 专栏| 开江县| 淄博市| 密山市| 通渭县| 常山县| 鄯善县|