PHP類方法重寫原則

來源:互聯網
上載者:User
可能我們日常工作中很少用到這塊知識點,但我還是喜歡把遇到的卻不清楚的知識點摸清

PHP的類方法重寫規則

1、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無重載機制 所以判斷是不是重寫只會通過方法名(C/C++不僅要方法名相同,參數也相同時才被視為重寫,否則即為重載,即新定義了一個多態函數的態)

class Father{    public function index($args_1)    {    }}class Child extends Father{    public function index($args_1, $args_2)    {        //在C/C++中此為重載非重寫,因為C/C++具有標準的多態機制,會因參數不同而視為某一方法的另一種態        //but在php中此依然為重寫    }        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皆可    }}
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.