php中重寫父類方法時需要注意什么

php中重寫父類方法時需要注意:1、final關(guān)鍵字修飾的類方法不可被子類重寫;2、php是否重寫父類方法只會根據(jù)方法名是否一致判斷;3、重寫時訪問級別只可以等于或者寬松于父類,不可提升訪問級別。

創(chuàng)新互聯(lián)專注于個舊網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供個舊營銷型網(wǎng)站建設(shè),個舊網(wǎng)站制作、個舊網(wǎng)頁設(shè)計、個舊網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務(wù),打造個舊網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供個舊網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

PHP中類方法重寫規(guī)則

(推薦教程: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是否重寫父類方法只會根據(jù)方法名是否一致判斷(5.3以后重寫父類方法參數(shù)個數(shù)必須一致)

這里并不是說方法參數(shù)無任何作用,PHP無重載機制。所以判斷是不是重寫只會通過方法名(C/C++不僅要方法名相同,參數(shù)也相同時才被視為重寫,否則即為重載,即新定義了一個多態(tài)函數(shù)的態(tài)) 。

當(dāng)方法名相同時即被認為是在重寫父類方法,5.2可以參數(shù)不同,5.3以后參數(shù)需和父類方法一致,且都追尋繼承訪問級別的規(guī)則。

class Father
{
    public function index($args_1)
    {
    }
}

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

(視頻教程推薦:php視頻教程)

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

父類的public方法不能被子類重寫為protected或者private,protected方法不能被重寫為private。

class Father
{
    public function index()
    {
    }
}

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

分享文章:php中重寫父類方法時需要注意什么
文章源于:http://muchs.cn/article6/cjpsig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作品牌網(wǎng)站建設(shè)、網(wǎng)站排名、用戶體驗面包屑導(dǎo)航、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化