void destruct ( void )
PHP 5 引入了析構函數的概念,這類似於其它#物件導向的語言,如C++。析構函數會在到某個物件的所有參考都被刪除或當物件被明確銷毀時執行。
析構函式範例
<?php class MyDestructableClass { function construct () { print "In constructor\n" ; $this -> name = "MyDestructableClass" ; } function destruct () { print "Destroying " . $this -> name . "\n" ; } } $obj = new MyDestructableClass (); ?>
和建構子一樣,父類別的析構函式不會被引擎暗中呼叫。要執行父類別的析構函數,必須在子類別的析構函數體中明確地呼叫parent::destruct() 。另外也和建構子一樣,子類別如果自己沒有定義析構函式則會繼承父類別的。
析構函數即使在使用 exit() 終止腳本執行時也會被呼叫。在析構函數中呼叫 exit() 將會中止其餘關閉作業的運作。
Note:
析構函數在腳本關閉時調用,此時所有的 HTTP 頭資訊已經發出。腳本關閉時的工作目錄有可能和在 SAPI(如 apache)中時不同。
Note:
試圖在析構函數(在腳本終止時被呼叫)中拋出一個例外會導致致命錯誤。
class x { function construct() { $this->file = fopen('path', 'a'); } function destruct() { fclose($this->file); } }
簡單的說,析構函數是用來在物件關閉時完成的特殊工作,比如我寫的上例,在實例化同時打開某文件,但是它什麼時候關閉呢,用完就關閉唄,所以析構函數直接關閉它,
又或者在析構時,我們將處理好的某些數據一併寫進數據庫,這時可以考慮使用析構函數內完成,在析構完成前,這些物件屬性仍然存在,並且僅用於內部存取,所以可以放心的做與物件有關的任何善後工作
析構函數並不是為了把物件自身的記憶體釋放,而是當使用者需要額外釋放某些記憶體時用它來指導php需要釋放的內存在哪裡,最後php在析構時使用
一般情況下,我們不需要顯式寫虛構函數.除非你真的有需要釋放的資源.
簡單的釋放使用以下的就可以.
unset(變數名稱);
或$變數名稱= NULL;即可.
以上是php析構函數的用法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!