本文主要和大家分享PHP析構函數與回收機制實例詳解,主要以程式碼的方式和大家分享,希望能幫助大家。
// ===筆記部分1===
/*
疑問
1、把物件賦值為其他,例如true 會不會銷毀物件?
答案:可以
2、110.php中程式碼部分4
為什麼銷毀一個,空2個
最後一個會出現在hr線下面?
答案:最後一個銷毀,是因為php頁面執行完畢了,
最後系統回收,$d此時才銷毀,
因此顯示在hr線後面
*/
// ===程式碼部分1===
class Human2 { public $name = null; public $gender = null; public function __construct() { echo '出生了<br >'; } public function __destruct() { echo '再见<br >'; } }$a = new Human2();$b = new Human2();$c = new Human2();$d = new Human2();unset($a);//$b = false;$b = true;//改成true也可以销毁$c = null;echo '<hr >';
// 物件的回收機制
// ===程式碼部分2===
class Human { public $name = null; public $gender = null; public function __destruct() { echo '再见!<br >'; } }$a = new Human();$b = $c = $d = $a;unset($a);echo '<hr >';
/*
那麼問題來了:
1、死了幾次?
2、死在hr線上,還是死在hr線下?
答:死了一次,在灰線以下。
如圖11101所示,開啟human房子的其中一把a鑰匙沒了,
還有b,c,d三把鑰匙。
直到最終所有程式碼執行完,啟動回收機制,
最終再見。
*/
// ===程式碼部分3===
class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '再见!<br >'; } }$a = new Human();$b = $c = $d = $a;echo $a->name,'<br >'; //张三echo $b->name,'<br >'; //张三$b->name ='李四';echo $a->name,'<br >'; //李四echo $b->name,'<br >'; //李四unset($a);echo '<hr >';// hr线// 再见!
#// ===程式碼部分4===
class Human { public $name = '张三'; public $gender = null; public function __destruct() { echo '再见!<br >'; } }$e = $f = $g = new Human();unset($e);echo 'unset e<br >';unset($f);echo 'unset f<br >';unset($g);// 本行unset触发对象消亡,然后执行下一行echo gecho 'unset g<br >';
/*
在此處,頁面運行完畢,物件銷毀,執行析構函數
銷毀了幾個物件?
答案:
只有一個對象,隻死1次
死在系統回收時,即頁面執行完畢,因此在hr線下.
*/
#相關推薦:
以上是PHP析構函數與回收機制實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!