日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
PHP類(lèi)方法的重寫(xiě)原則-創(chuàng)新互聯(lián)

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

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到華亭網(wǎng)站設(shè)計(jì)與華亭網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋華亭地區(qū)。

PHP類(lèi)方法重寫(xiě)原則:1、final修飾的類(lèi)方法不可被子類(lèi)重寫(xiě);2、PHP是否重寫(xiě)父類(lèi)方法只會(huì)根據(jù)方法名是否一致判斷;3、重寫(xiě)時(shí)訪(fǎng)問(wèn)級(jí)別只可以等于或者寬松于父類(lèi),不可提升訪(fǎng)問(wèn)級(jí)別。

PHP類(lèi)方法重寫(xiě)原則:

1、final修飾的類(lèi)方法不可被子類(lèi)重寫(xiě)

final修飾的類(lèi)方法不可被子類(lèi)重寫(xiě) 即便final private方法無(wú)法被繼承 子類(lèi)仍不能對(duì)齊進(jìn)行重寫(xiě)

class FinalMethod
{
    //可繼承不可重寫(xiě)
    final public function finalPublic()
    {
        echo "can be inherited, but be overrided";
    }
    //可繼承不可重寫(xiě)
    final protected function finalProtected()
    {
        echo "can be inherited, but be overrided";
    }
    //不可繼承不可重寫(xiě) 雖然子類(lèi)繼承不到父類(lèi)的private方法 但同時(shí)也會(huì)被final限制無(wú)法重寫(xiě)
    final private function finalPrivate()
    {
        echo "can not be inherited or be overrided";
    }
    //雖然不可繼承 但子類(lèi)里可重寫(xiě)此方法
    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()
    {
        //子類(lèi)繼承父類(lèi)重寫(xiě)父類(lèi)方法時(shí)訪(fǎng)問(wèn)級(jí)別只能更加寬松 不可更為嚴(yán)格
    }
}

2、PHP是否重寫(xiě)父類(lèi)方法只會(huì)根據(jù)方法名是否一致判斷(5.3以后重寫(xiě)父類(lèi)方法參數(shù)個(gè)數(shù)必須一致)

這里并不是說(shuō)方法參數(shù)無(wú)任何作用 PHP無(wú)重載機(jī)制 所以判斷是不是重寫(xiě)只會(huì)通過(guò)方法名(C/C++不僅要方法名相同,參數(shù)也相同時(shí)才被視為重寫(xiě),否則即為重載,即新定義了一個(gè)多態(tài)函數(shù)的態(tài)) 當(dāng)方法名相同時(shí)即被認(rèn)為是在重寫(xiě)父類(lèi)方法,5.2可以參數(shù)不同,5.3以后參數(shù)需和父類(lèi)方法一致,且都追尋繼承訪(fǎng)問(wèn)級(jí)別的規(guī)則。

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

3、重寫(xiě)時(shí)訪(fǎng)問(wèn)級(jí)別只可以等于或者寬松于父類(lèi) 不可提升訪(fǎng)問(wèn)級(jí)別

父類(lèi)的public方法不能被子類(lèi)重寫(xiě)為protected或者private,protected方法不能被重寫(xiě)為private,可以寬松er,不可以嚴(yán)格er

class Father
{
    public function index()
    {
    }
}
class Child extends Father
{
    protected/private function index()
    {
       //訪(fǎng)問(wèn)權(quán)限提升 錯(cuò)誤
       //父類(lèi)為public 則子類(lèi)重寫(xiě)也只能為public
       //父類(lèi)為protected 則子類(lèi)可為public/protected
       //父類(lèi)為private 則子類(lèi)public/protected/private皆可
    }
}

其實(shí)關(guān)于訪(fǎng)問(wèn)級(jí)別繼承規(guī)則有很多有趣的地方

private在我們常識(shí)中是無(wú)法被繼承的,子類(lèi)拿不到,但其訪(fǎng)問(wèn)級(jí)別已是高,所以你在子類(lèi)中可以寫(xiě)成private protected public 仿佛是我們自己重新定義了一個(gè)函數(shù)一樣,這點(diǎn)在5.2版本之前尤其突出,因?yàn)?.2之前的版本在繼承重寫(xiě)父類(lèi)方法是可以不保持參數(shù)個(gè)數(shù)相同,但5.3以后加強(qiáng)了這方面的限制,參數(shù)個(gè)數(shù)必須與父類(lèi)相同

注:

子類(lèi)實(shí)現(xiàn)父類(lèi)的抽象方法或某類(lèi)實(shí)現(xiàn)接口的方法時(shí)其實(shí)仍屬于繼承關(guān)系,仍追尋訪(fǎng)問(wèn)等級(jí)只能降低不可提升的規(guī)則

而且

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

看完了這篇文章,相信你對(duì)PHP類(lèi)方法的重寫(xiě)原則有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)頁(yè)題目:PHP類(lèi)方法的重寫(xiě)原則-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)源:http://www.dlmjj.cn/article/gghcs.html