請教php 析構函式的問題
<?php class a{ static $ss=null; function ff($p){ self::$ss=$p; return self::$ss; } function destruct(){ echo "一二三"; } } $rrrr=new a(); echo $rrrr->ff(4444); $aaaa=new a(); echo $aaaa->ff(55555);
========================
輸出結果: 444455555一二三一二三
======================
我想請教的是,析構函數不是物件銷毀後執行的嗎,當物件$rrrr執行後,執行$aaaa的時候$rrrr這個物件應該已經銷毀了啊,這個銷毀後應該輸出析構函數的"一二三" 可是我們看到的結果是,444455555一二三一二三,我覺得,結果應該是4444一二三55555一二三,這樣才對的嘛
#不是這樣的。 unset($rrrr)或許能觸發物件析構,但是new a()並不會觸發喔。你只是取得了兩個a的實例,並沒有進行過析構的。
頁面存取結束後php自動析構實例$rrrr和$aaaa,所以連續輸出兩次一二三。
謝謝,但這個是單例模式
static $ss這個類別變數重新賦值時,以前的不是就要銷毀嗎
親,你這個不是單件模式...只是一個有靜態屬性的普通物件而已,而且就算是單件模式也不會用到析構的。學程序要非常仔細啊,細節太重要了。這個才是單件
class singleDemo { protected static $instance = false; protected construct() { } public static function getInstance() { if (! self::$instance instanceof self) { self::$instance = new self(); } return self::$instance; } }
單件,是指你只能操作相同的實例。講這個需要太多話了,既然你知道單件模式那就直接去看那個的說明好了
析構函數是在物件銷毀時呼叫的程式碼。
當這個物件用完之後,會自動執行這個函數中的語句。
你的這個物件對於整個檔案來說還沒用完,只有到輸出55555後才是真的用完,因為呼叫了2次,所以後面有兩個一二三!望採納!
以上是php 析構函數的問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!