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

        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號
        主站蜘蛛池模板: 嫩草影院久久国产精品| 国产精品主播一区二区| 国产亚洲精品免费视频播放| 国产a∨精品一区二区三区不卡| 精品偷自拍另类在线观看丰满白嫩大屁股ass| 日韩精品无码免费一区二区三区| 国产午夜亚洲精品理论片不卡| 精品九九人人做人人爱| 国产A级毛片久久久精品毛片| 伊人久久大香线蕉精品不卡| 国产精品久久久99| 久久er国产精品免费观看2| 久久夜色精品国产噜噜麻豆| 人妻少妇看A偷人无码精品| 国产AV国片精品一区二区| 99久久精品国产高清一区二区| 日韩精品一区二区三区色欲AV| 无码人妻一区二区三区精品视频| 国产L精品国产亚洲区久久| 日韩精品国产自在久久现线拍| 国产AV无码专区亚洲精品| 人人妻人人澡人人爽人人精品电影| 欧美在线精品一区二区三区 | 国产精品香蕉在线观看| 久久99久久99小草精品免视看| 999精品在线| 99国产欧美精品久久久蜜芽| 国产综合精品一区二区三区| 久久er99热精品一区二区| 久久久久人妻一区精品性色av| 午夜DY888国产精品影院| 亚洲精品乱码久久久久久按摩 | 精品9E精品视频在线观看| 亚洲国产精品福利片在线观看| 亚洲欧洲自拍拍偷精品 美利坚| 欧美亚洲综合免费精品高清在线观看 | 亚洲精品美女久久久久99| 亚洲av午夜福利精品一区| 亚洲AV无码久久精品狠狠爱浪潮| 亚洲av午夜成人片精品电影| 亚洲国产精品一区二区三区久久|