2010年最新PHP類的精縮歸納

一:結構和調用(實例化):

class className{} ,調用:$obj = new className();當類有構造函數時,還應傳入參數。如$obj = new className($v,$v2…);

二:構造函數和析構函數
1、構造函數用於初始化:使用__construct(),可帶參數。
2、但析構函數不能帶參數(用於在銷去一個類之前執行一些操作或功能)。析構函數用__destruct()做名稱。在腳本執行結束時,PHP會銷掉內存中的對象,因此可不用析造函數,但有些比如COOKIE等,就應當要用此函數銷掉。
知識點:在PHP4中也提供瞭構造函數,但使用的是與類同名的類方法,在PHP5仍能兼容這種做法,當一個類中沒有包含__construct時,會查找與類同名的方法,如果找到,就認為是構造函數,如下:
class test
{ var $b;
function test() {   $this->b=5; }
function addab($c) {   return $this->b+$c; }
}
$a = new test();   echo $a->addab(4); // 返回 9
3、PHP不會自動調用父類的構造函數(不支持構造函數重載),必須使用parent關鍵字顯式地調用。
class employee{
      function __construct()….
}
class Manager extents Employee{
     function __construct(){
          parent::_construct();
          echo 這個子類的父類構造函數調用瞭!;
     }
}
當然也可以調用與該實例沒有任何關系的其它類的構造函數。隻需在__construct()前加上類名即可。如:
otherClassName::__construct();

類的主傢庭成員:屬性、方法、常量、靜態成員

三、類的屬性:
有兩種方法對類的屬性賦值或取值。
1、使用公共作用域public關鍵詞。
2、使用__set()和__get()來分別賦值和取值,前者稱為設置方法(setter)或修改方法(mutator),後者稱為訪問方法(accessor)或獲取方法(getter)。建議使用這種方法:優點:
A、可在__set()統一進行數據驗證。
B、便於統一管理屬性。
註意:
第一:__set()和__get()隻對私有屬性起作用,對於用public定義的屬性,它們兩個都懶理搭理,如下:
class test{
protected $a=9,$b=2,$c;
   public $d;
    function __set($n,$v) {    $this->$n = $v+2; }
    function __get($name) { return $this->$name+2; }
}
$a = new test();
$a->b =5; echo "<br />";   echo $a->b;
實例隻對$a,$b,$c的設置會經過__set和__get過濾與返回,對於$d,就不會起作用。如$a->d=5,再返回還是5。
第二:__set($n,$v)要帶兩個參數。而__get($n)隻能有一個參數。實例:
class test{
      private $a=5,$b=6,$c;
      function __set($n,$v)
     {
        if($n==a&&$n>0)
               $this->$n = $v;
         else
               $this->$n = $v+2;    
     }
      function __get($name)
      {
            return $this->$name; //如果改為return $this->$name + $this->addab();   如調用a的值,實際返回的是a+a+b的值。默認為5+5+6=16。
      }
      function addab()
       {         return $this->a + $this->b;   }
}
$e=new test();
$e->a = 11;   //註意寫法:類的內部用$this->$n即變量的寫法,但外部實例要用$e->a的方式。
$e->b = 12;   //get 14
$e->k = 22;

類的屬性可自由擴展,如上例的k,不管是否用__set,當一個實例建立起來後,可以用$e->newProperty = xx;直接來創造一個屬性,但不建議這麼做。

發佈留言