首頁 >後端開發 >php教程 >PHP物件導向-子類別擴充父類別(子類別重新載入父類別)的範例程式碼分享

PHP物件導向-子類別擴充父類別(子類別重新載入父類別)的範例程式碼分享

黄舟
黄舟原創
2017-03-25 10:00:441633瀏覽

  在PHP中,會遇到這樣的情況,子類別繼承父類,但是又需要對父類別的屬性和方法進行一定的擴展,這時子類別可以對屬性和方法進行重寫,覆蓋與父類別同名的屬性和方法,但是如果父類別的方法中的內容比較多,比如上百成千行程式碼,這時只需使用”父類別名稱::方法” 或“parent::方法“來呼叫父類別中被覆寫的方法,有就是重新載入父類別,然後再加上需要擴充的語句。

方法的重寫

<?php
 class Person{
       public $name;       
       public function construct($name="" ){         
               $this->name=$name;                                             
        }        public  function say(){
             echo "我叫".$this->name  ;  
        } 

}?><?php
     class Student extends Person{
          public $name;               

          public function construct($name=""){
               $this->name =$name;
          }//这里定义了一个和父类中同名的方法,将父类中的说话方法覆盖并重写
    public  function say(){
             echo "我叫".$this->name .",今年25岁了" ;  
    } 
}?>

重寫方法與存取權限

  在子類別覆寫父類別的方法時要注意,在子類別中重寫的方法的存取權限一定不能低於父類別被覆寫的方法的存取權限。例如父類別中的方法的存取權限是protected,那麼在子類別中重寫的方法的權限就要是protected或public。如果父類別的方法是public權限,子類別中要重寫的方法只能是public。總之在子類別中重寫父類別的方法時,一定要高於父類別被覆寫的方法的權限。

重寫時的參數數量

  子類別可以擁有與父類別不同的參數數量,如下面的建構方法中,多加入了一個參數$age。

<?phpclass Student extends Person{

    public $name;    
    public $age;        

    public function construct($name="",$age=25){

         $this->name =$name;         $this->age =$age;

    }    public  function say(){

         echo "我叫".$this->name .",今年".$this->age."岁了" ;  

    } 

}?>

  上面的例子,透過覆寫我們就實現了對「方法」擴充。
  但是,像這樣做雖然解決了我們上面說的問題,但是在實際開發中,一個方法不可能就一條程式碼或是幾個程式碼,比如說「Person」類別裡面的「say()」方法裡面有100個程式碼,如果我們想對這個方法覆蓋保留原有的功能外加上一點點功能,就要把原有的100個代碼重寫一次, 再加上擴展的幾條代碼,這還算是好的,而有的情況,父類別中的方法是看不見原始碼的,這時候你怎麼去重寫原有的程式碼呢?我們也有解決的辦法,就是在子類別這個方法中可以呼叫到父類別中被覆寫的方法, 也就是把被覆寫的方法原有的功能拿過來再加上自己的一點功能,可以透過兩種方法實作在子類別的方法中呼叫父類別被覆寫的方法:

  一種是使用父類別的「類別名稱::」 來呼叫父類別中被覆寫的方法;
  一種是使用「parent::」的方試來呼叫父類別中被覆寫的方法;
  

#方法的擴充

<?phpclass Student extends Person{

    public $name;    
    public $age;                                 

    public function construct($name="",$age=25){

        parent::construct($name,$age);        $this->age =$age;

    }    public  function say(){

        parent::say();        echo ",今年".$this->age."岁了" ;  

    } 

}?>

##rrreee上面所描述的只是重新載入

了父類別的屬性和方法,不是真正意義上的
重載###,只能說是子類別對父類進行了擴展,在php中,也存在重載(overloading)一詞,但跟一般面向語言中的重載意義不同。 ##########

以上是PHP物件導向-子類別擴充父類別(子類別重新載入父類別)的範例程式碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn