解構函式:當某個對象成為垃圾或者當對象被顯式銷毀時執行。
GC (Garbage Collector)
在PHP中,沒有任何變數指向這個對象時,這個對象就成為垃圾。PHP會將其在記憶體中銷毀。這是PHP的GC (Garbage Collector)垃圾處理機制,防止記憶體溢出。當一個PHP線程結束時,當前佔用的所有記憶體空間都會被銷毀,當前程式中的所有對象同樣被銷毀。
destruct() 解構函式,是在垃圾對象被回收時執行。
解構函式也可以被顯式調用,但不要這樣去做。
解構函式是由系統自動調用的,不要在程式中調用一個對象的解構函式。
解構函式不能帶有參數。
程式結束前,所有對象被銷毀。解構函式被調用了。
<?php class Person{ public function destruct() { echo "<br />解構函式在這裡執行"; echo "<br />這裡一般用來放置,關閉資料庫,關閉檔案等等收尾工作。"; } } $p = new Person(); for ($i = 0; $i < 5; $i++) { echo "<br /> $i"; } //我們在這裡看到,在PHP程式結束前,對象被銷毀了。 ?>
當對象沒有指向時,對象被銷毀。
<?php class Person { public function destruct() { echo "<br />解構函式在這裡執行"; echo "<br />這裡一般用來放置,關閉資料庫,關閉檔案等等收尾工作。"; } } $p = new Person(); $p = null; //我們在這裡看到,解構函式在這裡被執行了。 for ($i = 0; $i < 5; $i++) { echo "<br /> $i"; } ?>
我們將$p設定為空白或者第11行賦予$p一個字串,這樣$p之前指向的對象就成為了垃圾對象。PHP將這個對象垃圾銷毀。
unset變數
<?php class Person { public function destruct() { echo "<br />解構函式在這裡執行<br />"; } } $p = new Person(); $p1 = $p; //設定新引用變數$p1也指向這個對象 unset($p); echo "是否看到/$p被銷毀,對象也被銷毀呢?"; for ($i = 0; $i < 5; $i++) { echo "<br /> $i"; } unset($p1); echo "我們看到這裡,解構函式被執行了"; ?>
unset一個引用變數時,unset 銷毀的是指向對象的變數,而不是這個對象。