首頁 >後端開發 >php教程 >php 析構函數的問題?

php 析構函數的問題?

黄舟
黄舟原創
2017-07-02 10:31:151485瀏覽

請教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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn