php 物件導向(四)

承續一個類別的功能,建立出新的類別,稱之為類別的繼承。

這時,原來的類別稱為"超類別(superclass)""基底類別(base class)"或是"父類別"

而繼承這個基底類別,定義出的新類別稱之為"子類別(subclass)""衍生類別(derived class)"或是"擴充類別"。

繼承時要用的關鍵字extends。"class 衍生類別 extends 基底類別"。

他的公式:A類別是基底類別,而B類別是A類別的衍生類別。

//基底類別
class A類別
{

}

//衍生類別
class B類別 extends A類別
{

}

當然,衍生類別是可以不斷的衍生下去,到三層第四層...一直到第N層。

不過PHP有個缺點,他就是不能同時繼承多個類別。換個方式說,PHP沒有所謂的多重繼承。

雖然衍生類別裡原則上是可以使用基底類別的方法或是屬性,但是這會因為基底類別宣告時設定的存取而有差別。我用下面這個表格來表示。

基底類別的宣告 從衍生類別存取
直接 從衍生類別定義的方法存取 
 public O
 protected X O
 private X


另外,有一點很重要,在建立衍生類別的實體時,會自動呼叫衍生類別的建構子,但是不會自動呼叫基底類別的建構子。要想要在衍生類別裡面呼叫基底類別的建構子,要這樣呈現"parent::__construct()"。解建構子也是一樣,解建構子的呼叫方法"parent::__destruct()"。

下面我就寫個範例,提供參考:

class HelloOOP
{

  //php4的宣告成員屬性
  var $memberA;
  //php5的宣告成員屬性
  public $memberB;

  //建構子 For PHP5
  function __construct($inputA,$inputB)
  {
      $this->memberA=$inputA;
      $this->memberB=$inputB;
  }

  //定義解建構子
  function __destruct()
  {
      echo "這個類別被解開了!";
  }

  //宣告成員方法
  public function callShowMessage()
  {

      //呼叫成員方法來使用。
     $this->showMessage();

  }

   //宣告成員方法,不加上關鍵字都視為public
   function showMessage()
   {

        //呼叫成員屬性來使用。
        $this->memberA."<BR>";

   }

}

class Bclass extends HelloOOP
{

     function __construct($clasaB_inputA,$clasaB_inputB)
     {

          //執行基地類別的建構子
          parent::__construct("測試","繼承");
          $this->classB_memberA=$clasaB_inputA;
          $this->classB_memberB=$clasaB_inputB;

     }

     //宣告成員方法
     public function B()
    {

        //呼叫基底類別的成員方法來使用。
        $this->callShowMessage();

    }

}

$A=new HelloOOP("HELLO","你好");

//建立出實體之後運用裡面的方法。 會顯示 HELLO
$A->callShowMessage();

//建立出實體之後運用裡面的屬性。會顯示 "你好"
echo $A->memberB."<BR>";

$B=new Bclass("BA","BB");

//這邊他會顯示"測試"
$B->B();

//這邊他會顯示"繼承"
echo $B->memberB."<BR>";


PHP物件導向的第一課:class - iT邦幫忙::IT知識分享社群

PHP物件導向的第二課 - iT邦幫忙 - iThome

PHP物件導向的第三課:建構式- iT邦幫忙::IT知識分享社群

PHP物件導向的第四課:繼承- iT邦幫忙::IT知識分享社群

PHP物件導向的第五課:介面(interface)&虛擬類別- iT邦幫忙::IT知識分享社群

[練習] PHP物件導向程式設計從零開始| Samuel Tsai's Blog

 

留言

這個網誌中的熱門文章

c語言-關於#define用法

CMD常用網管指令

PHP 與 JavaScript 之間傳值利用 json