php中重寫父類方法時(shí)的注意事項(xiàng)?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,先為牧野等服務(wù)建站,牧野等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為牧野企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
php中重寫父類方法時(shí)需要注意:1、final關(guān)鍵字修飾的類方法不可被子類重寫;2、php是否重寫父類方法只會(huì)根據(jù)方法名是否一致判斷;3、重寫時(shí)訪問級(jí)別只可以等于或者寬松于父類,不可提升訪問級(jí)別。
PHP中類方法重寫規(guī)則
1、final修飾的類方法不可被子類重寫
final修飾的類方法不可被子類重寫,即便final private方法無法被繼承,子類仍不能對(duì)其進(jìn)行重寫。
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方法 但同時(shí)也會(huì)被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() { //子類繼承父類重寫父類方法時(shí)訪問級(jí)別只能更加寬松 不可更為嚴(yán)格 } }
2、PHP是否重寫父類方法只會(huì)根據(jù)方法名是否一致判斷(5.3以后重寫父類方法參數(shù)個(gè)數(shù)必須一致)
這里并不是說方法參數(shù)無任何作用,PHP無重載機(jī)制。所以判斷是不是重寫只會(huì)通過方法名(C/C++不僅要方法名相同,參數(shù)也相同時(shí)才被視為重寫,否則即為重載,即新定義了一個(gè)多態(tài)函數(shù)的態(tài)) 。
當(dāng)方法名相同時(shí)即被認(rèn)為是在重寫父類方法,5.2可以參數(shù)不同,5.3以后參數(shù)需和父類方法一致,且都追尋繼承訪問級(jí)別的規(guī)則。
class Father { public function index($args_1) { } } class Child extends Father { //5.3以后重寫方法必須與父類保持參數(shù)個(gè)數(shù)相同 public function index($args_1, $args_2) { //在C/C++中此為重載非重寫,因?yàn)镃/C++具有標(biāo)準(zhǔn)的多態(tài)機(jī)制,會(huì)因參數(shù)不同而視為某一方法的另一種態(tài) //but在php中此依然為重寫 但5.3以后此為非法 必須與父類的方法參數(shù)個(gè)數(shù)保持一致 } //5.3以后重寫方法必須與父類保持參數(shù)個(gè)數(shù)相同 private function index($args_1, $args_2) { //C/C++會(huì)因?yàn)閰?shù)不同于父類方法而視為重載,即新定義了一個(gè)函數(shù)的態(tài),所以不會(huì)受到繼承訪問權(quán)限的限制 //但php仍然會(huì)被視為對(duì)父類方法的重寫,會(huì)受到繼承訪問權(quán)限的升降規(guī)則限制 } }
3、重寫時(shí)訪問級(jí)別只可以等于或者寬松于父類,不可提升訪問級(jí)別
父類的public方法不能被子類重寫為protected或者private,protected方法不能被重寫為private。
class Father { public function index() { } } class Child extends Father { protected/private function index() { //訪問權(quán)限提升 錯(cuò)誤 //父類為public 則子類重寫也只能為public //父類為protected 則子類可為public/protected //父類為private 則子類public/protected/private皆可 } }
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。