php類

計算機術語之一

類是變數與作用於這些變數的函數的集合。使用下面的語法定義一個類.

語法說明


使用下面的語法定義一個類:
class Cart { var $items; // 購物車中的物品
// 將 $num 個 $artnr 物品加入購物車
function add_item($artnr, $num) {
$this->items[$artnr] += $num;
} // 將 $num 個 $artnr 物品從購物車中取出
function remove_item($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num; return true;
} elseif
($this->items[$artnr] == $num) {
unset($this->items[$artnr]); return true;
} else {
return false; }
}
} ?>
上面的例子定義了一個 Cart 類,這個類由購物車中的商品構成的數組和兩個用於從購物車中添加和刪除商品的函數組成。
class test {
?>
function test() {
print 'OK'; }
}?>
但是以下用法是可以的:
php 4 中,var 變數的值只能初始化為常量。用非常量值初始化變數,需要一個初始化函數,該函數在對象被創建時自動被調用。這樣一個函數被稱之為構造函數(見下面)。
todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; }}?>
類也是一種類型,就是說,它們是實際變數的藍圖。必須用 new 運算符來創建相應類型的變數。
add_item("10", 1);$another_cart = new Cart;$another_cart->add_item("0815", 3);?>
上述代碼創建了兩個 Cart 類的對象 $cart 和 $another_cart,對象 $cart 的方法 add_item() 被調用時,添加了 1 件 10 號商品。對於對象 $another_cart,3 件 0815 號商品被添加到購物車中。
$cart 和 $another_cart 都有方法 add_item(),remove_item() 和一個 items 變數。它們都是明顯的函數和變數。可以把它們當作文件系統中的某些類似目錄的東西來考慮。在文件系統中,可以擁有兩個不同的 README.TXT 文件,只要不在相同的目錄中。正如從為了根目錄訪問每個文件需要輸入該文件的完整的路徑名一樣,必須指定需要調用的函數的完整名稱:在 php 術語中,根目錄將是全局名字空間,路徑名符號將是 ->。因而,名稱 $cart->items 和 $another_cart->items 命名了兩個不同的變數。注意變數名為 $cart->items,不是 $cart->$items,那是因為在 php 中一個變數名只有一個單獨的美元符號。
items = array("10" => 1);// 不正確,因為 $cart->$items 變成了 $cart->""$cart->$items = array("10" => 1);// 正確,但可能不是想要的結果:// $cart->$myvar 變成了 $cart->items$myvar = 'items';$cart->$myvar = array("10" => 1);?>
在定義類的時候,無法得知將使什麼名字的對象來訪問:在編寫 Cart 類時,並不知道之後對象的名稱將會命名為 $cart 或者 $another_cart。因而你不能在類中使用 $cart->items。然而為了類定義的內部訪問自身的函數和變數,可以使用偽變數 $this 來達到這個目的。$this 變數可以理解為“我自己的”或者“當前對象”。因而 '$this->items[$artnr] += $num' 可以理解為“我自己的物品數組的 $artnr 計數器加 $num”或者“在當前對象的物品數組的 $artnr 計數器加 $num”。

注意事項


偽變數 $this 通常未定義,如果其所在的方法是被靜態調用的話。但這不是個嚴格規定:如果一個方法被從另一個對象內靜態調用的話,則 $this 會被定義。此時 $this 的值是那個發出調用的對象。用下例演示:
isset($this)) { echo '$this is defined ('; echo get_class($this); echo ")/n"; } else { echo "/$this is not defined./n"; } }}class B{ function bar() { A::foo(); }}$a = new A();$a->foo();A::foo();$b = new B();$b->bar();B::bar();?>上例將輸出:
$this is defined (a)$this is not defined.$this is defined (b)$this is not defined.
  • 目錄