欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網
          最全最豐富的資訊網站

          php中的重寫override

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

          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 ?>

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

          <?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中重寫要求子類重寫父類方法的時候,必須保證與父類同名方法參數(shù)一致。

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

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

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

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

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

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

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

          贊(0)
          分享到: 更多 (0)
          網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號