站長資訊網
最全最豐富的資訊網站

php中的重寫override

定義:重寫(override),即子類中定義了與父類重名的成員,子類可以重寫父類任意類成員,通常重寫是用來重寫父類的方法,用于擴展或者更改某些業務邏輯。

1.不管是公有和是受保護屬性,一旦重寫父類的就會不存在,而私有屬性不會被覆蓋而丟失。

<?php     class A{                public $name='張三';         protected $sex='man';         private  $age='25';          public function getName(){            echo __CLASS__,'<br/>';            echo $this->name."<br>";         }         protected function getSex(){             echo __CLASS__,'<br/>';             echo $this->sex."<br>";         }         private function getAge(){             echo __CLASS__,'<br/>';             echo $this->age."<br>";         }      }     class B extends A{                  public $name='王五';         protected $sex='woman';         private  $age='26';                       public function getAll(){             echo $this->name."<br>";             echo $this->sex."<br>";             echo $this->age."<br>";         }     }      $a=new B();     var_dump($a);        /* object(B)#1 (4)     { ["name"]=> string(6) "王五"       ["sex":protected]=> string(5) "woman"       ["age":"B":private]=> string(2) "26"       ["age":"A":private]=> string(2) "25"    }*/          echo "<br>";     $a->getAll();//王五 woman 26 ?>

可以發現無論是公有屬性,還是受保護屬性都被覆蓋,而私有屬性因為沒有被繼承,所以不受影響。

<?php     class A{                public $name='張三';         protected $sex='man';         private  $age='25';          public function getName(){                        echo $this->name."我是父類的getName"."<br>";         }         protected function getSex(){                          echo $this->sex."我是父類的getSex"."<br>";         }         private function getAge(){                          echo $this->age."我是父類的getAge"."<br>";         }      }     class B extends A{                  public $name='王五';         protected $sex='woman';         private  $age='26';          public function getName(){                        echo $this->name."我是子類的getName"."<br>";         }         protected function getSex(){                        echo $this->sex."我是子類的getSex"."<br>";         }         private function getAge(){                        echo $this->age."我是子類的getAge"."<br>";         }         public function getAll(){             $this->getName();             $this->getSex();             $this->getAge();         }     }      $a=new B();     $a->getAll();//王五我是子類的getName woman我是子類的getSex 26我是子類的getAge     echo "<br>"; ?>

小結:公有、受保護的屬性重寫是直接覆蓋父類成員,私有屬性不會被覆蓋;公有、收保護的方法會被重寫,但是私有方法不會被重寫(私有方法本質沒有被繼承)。

2.子類重寫父類方法的要求。

a. 子類重寫父類的方法,控制權不能高于父類,即子類可以比父類更開放。

<?php class Fu{     protected function show(){         echo __CLASS__,'<br/>';     } } class Zi extends Fu{     protected function show(){}				//正確     public function show(){}				//允許     private function show(){}				//錯誤:控制權比父類更嚴格 } ?>

b. PHP中重寫要求子類重寫父類方法的時候,必須保證與父類同名方法參數一致。

<?php class Fu{     protected function show(){         echo __CLASS__,'<br/>';     } } class Zi extends Fu{     public function show(){}     public function show($a){}			//錯誤,與父類同名方法不一致 } ?>

c. 重寫針對的是被繼承的成員,父類私有方法不會被繼承,因此不受要求b規定。

<?php class Fu{     private function show(){         echo __CLASS__,'<br/>';     } } class Zi extends Fu{     private function show($name){		//不會報錯,因為本質不存在重寫(父類Fu::show沒有被繼承)         echo $name,'<br/>';     } } ?>

d.重寫是指子類擁有特殊的情況,一般是需要在父類的基礎上進行擴展,此時如果想要繼續保證父類被重寫的方法繼續執行(默認永遠只訪問子類重寫的新方法),需要在子類重寫方法的時候使用parent關鍵字。

<?php class Fu{     protected function show(){         echo __CLASS__,'<br/>';     } } class Zi extends Fu{     public function show(){         parent::show();                  //擴展業務邏輯         echo __CLASS__,'<br/>';     } }?>

小結:parent不能訪問父類的屬性,可以訪問靜態屬性靜態方法類常量普通方法

推薦:php教程,php視頻入門教程

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久国产香蕉一区精品 | 亚洲精品无码一区二区| 囯产精品一品二区三区| 精品久久久久久久久久中文字幕| 日韩精品福利片午夜免费观着| 日韩AV无码精品一二三区| 国产精品香蕉一区二区三区| 91亚洲精品第一综合不卡播放| 亚洲AV无码成人精品区蜜桃 | 亚洲精品资源在线| 午夜天堂精品久久久久| 国产精品9999久久久久| 国产精品无码a∨精品| 9i9精品国产免费久久| 精品国偷自产在线视频| 亚洲精品乱码久久久久久蜜桃 | 免费国产精品视频| 日韩久久精品一区二区三区| 国产精品国产AV片国产| 无码国产精品久久一区免费| 91精品成人福利在线播放| 精品国产三级a∨在线| 久久久精品国产免大香伊 | 日韩欧国产精品一区综合无码| 国产精品亚洲专区一区| 国产精品嫩草影院永久一| 精品伊人久久香线蕉| 岛国精品在线观看| 少妇人妻偷人精品视蜜桃| MM1313亚洲国产精品| 好男人视频社区精品免费| 在线观看精品一区| 精品无码国产AV一区二区三区 | 国产精品久久久香蕉| 2021国产精品自产拍在线观看 | 91精品福利一区二区三区野战| 久久精品无码一区二区无码| 91麻豆精品国产自产在线| 7m凹凸精品分类大全免费| 亚洲国产精品无码久久久| 中文天堂最新版在线精品|