第四節--建構函式和析構函式
如果你在乙個類中宣告乙個函式,命名為__construct,這個函式將被當成是乙個建構函式並在建立乙個物件例項時被執行. 清楚地說,__是兩個下劃線. 就像其它任何函式一樣,建構函式可能有引數或者預設值. 你可以定義乙個類來建立乙個物件並將其屬性全放在乙個語句(statement)中.
你也可以定義乙個名為__destruct的函式,php將在物件被銷毀前呼叫這個函式. 它稱為析構函式.
繼承是類的乙個強大功能. 乙個類(子類/派生類)可以繼承另一類(父類/基類)的功能. 派生類將包含有基類的所有屬性和方法,並可以在派生類中加上其他屬性和方法. 你也可以覆寫基類的方法和屬性. 就像3.1.2中顯示的,你可以用extends關鍵字來繼承乙個類.
你可能想知道建構函式是如何被繼承的. 當它們和其它方法一起被繼承時,他們不會在建立物件時被執行.
如果你需要這個功能,你需要用第二章提到的::運算子. 它允許你指向一塊命名空間. parent指向父類命名空間,你可以用parent::__construct來呼叫父類的建構函式.
一些物件導向語言在類之後命名建構函式. php的前幾個版本也是如此,到現在這種方法仍然有效.也就是:如果你把乙個類命名為animal並且在其中建立乙個命名也是animal的方法,則這個方法就是建構函式.如果乙個類的同時擁有__construt建構函式和與類名相同的函式,php將把__construct看作建構函式.這使得用以前的php版本所寫的類仍然可以使用. 但新的指令碼(php5)應當使用__construct.
php的這種新的宣告建構函式的方法可以使建構函式有乙個獨一無二的名稱,無論它所在的類的名稱是什麼. 這樣你在改變類的名稱時,就不需要改變建構函式的名稱.
你可能在php中給建構函式乙個像其它類方法一樣的訪問方式. 訪問方式將會影響從一定範圍內例項化物件的能力. 這允許實現一些固定的設計模式,如singleton模式.
析構函式,相反於建構函式. php呼叫它們來將乙個物件從記憶體中銷毀. 預設地,php僅僅釋放物件屬性所占用的記憶體並銷毀物件相關的資源. 析構函式允許你在使用乙個物件之後執行任意**來清除記憶體.
當php決定你的指令碼不再與物件相關時,析構函式將被呼叫. 在乙個函式的命名空間內,這會發生在函式return的時候. 對於全域性變數,這發生於指令碼結束的時候. 如果你想明確地銷毀乙個物件,你可以給指向該物件的變數分配任何其它值. 通常將變數賦值勤為null或者呼叫unset .
下面的例子中,計算從類中例項化的物件的個數. counter類從建構函式開始增值,在析構函式減值.
一旦你定義了乙個類,你可以用new來建立乙個這個類的例項. 類的定義是設計圖,例項則是放在裝配線上的元件. new需要類的名稱,並返回該類的乙個例項. 如果建構函式需要引數,你應當在new後輸入引數.
<?php
class counter
function __destruct()
function getcount() }
//建立第乙個例項
$c = new counter();
//輸出1
print($c->getcount() . "
n");
//建立第二個例項
$c2 = new counter();
//輸出2
print($c->getcount() . "
n");
//銷毀例項
$c2 = null;
//輸出1
print($c->getcount() . "
n");
?>
當你新建了乙個例項,記憶體會被準備來儲存所有屬性. 每個例項有自己獨有的一組屬性. 但方法是由該類的所有例項共享的.
PHP5的物件模型 9 繫結
第九節 繫結 除了限制訪問,訪問方式也決定哪個方法將被子類呼叫或哪個屬性將被子類訪問.函式呼叫與函式本身的關聯,以及成員訪問與變數記憶體位址間的關係,稱為繫結.在計算機語言中有兩種主要的繫結方式 靜態繫結和動態繫結.靜態繫結發生於資料結構和資料結構間,程式執行之前.靜態繫結發生於編譯期,因此不能利用...
公升級PHP5的理由 PHP4和PHP5效能對比
php 4到今年年底php group將不再對其進行支援了,所以為了讓大家更有信心的轉移到php 5平台上,我特別做了這個測試,看看我們php 4.x 是否真的效能比我們的php 5.x要好捏,測試結果很明顯,那就是php 5.x 比php 4.x不論是物件導向還是面向過程,都要比php 4.x 要...
PHP4和PHP5中的引用
php提供了引用操作符 在php中引用的意思是用不同的名字訪問同乙個變數內容,php4和php5中的物件引用是有區別的。a 8 b a echo a a 8 echo b b 8 a 12 echo a a 12 echo b b 8 首先建立變數 a,把整數8賦值給 a,然後把 a賦給 b,這時候...