2012年9月21日 星期五

[PHP] PHP的類別與物件


  1. 宣告方式
    1. 關鍵字為 class, 尾端不用分號
    2. member data需加關鍵字 var, e.g. var $unit = 0;
    3. member function需加關鍵字 function, e.g. function add(){}
    4. function 不用寫 return type
  2. 建立物件
    1. 以 new建立, 但不需 (), e.g. $bottle = new UnitCounter; // UnitCounter為 class, 建立好 instance後, assign給 $bottle變數
  3. 存取物件
    1. class name沒有大小寫之分
    2. 以 -> 存取 member data與 member function, e.g. $bottle->unit, $bottle->add()其中 $unit為 class UnitCounter的 member data, 而 add()為其 member function
    3. member function中以 $this->unit, $this->add()呼叫其 member data or function
  4. 建構與解構
    1. 建構式為 function __construct() 或與 class同名的 function, 不過一般建議使用 __construct()以便於搬移類別 (P.S. 此為 PHP 5之後才支援的功能), 另外, __construct()可帶參數建構成員變數.
    2. 解構式為 function __destruct(), 不可帶參數. 通常用於關閉資料庫的連結. 另外, 有時候很好用, 例如:  擁有 static 變數為 static $nObj; 其在 construct就呼叫其 +1, 而 destruct則 -1, 則可以輕鬆維護該類所有 object個數
    3. 利用 unset()可摧毀物件
  5. 存取設定
    1. 預設皆為 public
    2. private: 
      1. 於變數或 function前加 private, 不能用 private: 來一次宣告一堆 private變數
    3. 同時也支援 protected
    4. static: 
      1. 與 C++相同, 同一類別共享 static變數.
      2. static function只能呼叫 static變數, 當然也不能呼叫 $this, 因為其並沒有建立物件
      3. static變數以類別參照方式呼叫, e.g. class Donation 擁有 static member $num, 則 member function 以 Donation::$num而非 $this->num來存取.
  6. 複製物件
    1. 建立新物件後, PHP 5回傳的是物件參照, 而不是物件本身(copy). 從下方可看出端倪. (假定 unitCounter擁有 $unit, 且 add($value)為 $unit=$unit+$value; 
    2. $a = new UnitCounter();
      
      $a->add(5);
      $b = $a;
      $b->add(5);
      
      print "number = {$a->$unit}"; //列出 number = 10
      
    3. 若要純粹複至某物件的副本, e.g. 就像複製資料庫一樣, 不止複製格式, 也複製目前的內容, 則使用 __clone()函數, 見下例
    4. $a = new UnitCounter();
      
      $a->add(5);
      $b = $a->__clone();
      $b->add(5);
      
      print "number = {$a->$unit}"; //列出 number = 5
      print "number = {$b->$unit}"; //列出 number = 10
      
  7. 繼承
    1. 關鍵字 extends
    2. 單一繼承
    3. 以 parent:: 呼叫父類別, e.g.  parent::__construct($parameter); 呼叫父建構子

沒有留言:

張貼留言