国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于對(duì)象銷毀

bigman

to dear walkor:

    $obj = new $class();

    //記錄到對(duì)象池
    Gdate::$objPool = &$obj;

如上 我會(huì)把所有new過的對(duì)象都放入一個(gè)對(duì)象池里面,當(dāng)一個(gè)請(qǐng)求結(jié)束后 我需要 手動(dòng)銷毀所有對(duì)象
請(qǐng)問這個(gè)要怎么弄,直接 unset ?還是設(shè)值為null?試了下 unset掉 Gdate::$objPool 原本的 對(duì)象還存在 zend會(huì)拷貝一份,設(shè)置為null是可以的,但不知道是不是標(biāo)準(zhǔn)做法

2988 7 0
7個(gè)回答

walkor 打賞

試了下 unset掉 Gdate::$objPool 原本的 對(duì)象還存在 zend會(huì)拷貝一份

是怎么看出來的呢?

一般unset()就可以了,另外對(duì)象不用傳引用的,對(duì)象本身就是類似一種引用的機(jī)制。

  • 暫無評(píng)論
bigman

你是說 當(dāng) php new一個(gè)對(duì)象的時(shí)候 是對(duì)該內(nèi)存塊重新構(gòu)造初始化了一下嗎? 不過我試了下 當(dāng)請(qǐng)求不停過來 不停的new的時(shí)候 是越來越多的對(duì)象

  • 暫無評(píng)論
bigman
$aa = new \stdClass();
$aa->test1 = 123;
$aa->test2 = 456;
self::$tmp = &$aa;

$bb = new \stdClass();
$bb->t1 = "ssss";
$bb->t2 = "ooooo";

self::$tmp = &$bb;
$bb->t3 = "ppppppppppppp";

var_dump(self::$tmp);

foreach (self::$tmp as $key => $o) {
    unset(self::$tmp);
    //self::$tmp = null;
}
var_dump(self::$tmp);
echo "*************_**__**_{$bb->t2}**************";

我是這樣測(cè)試的

  • 暫無評(píng)論
walkor 打賞

根據(jù)php gc機(jī)制,如果沒有任何變量引用這個(gè)對(duì)象,對(duì)象就自動(dòng)釋放了。
因?yàn)?bb變量還引用著對(duì)象,所以$bb變量是可以訪問到對(duì)象的。
如果再unset($bb);或者離開變量作用域那么就都會(huì)釋放了。

直接設(shè)置 self::$tmp = null; 雖然可以釋放,但是self::$tmp里面仍然有多個(gè)null元素,不unset掉的話會(huì)有內(nèi)存泄漏

  • 暫無評(píng)論
bigman

那 如果 是 在 onMessage回調(diào)里面多次new了對(duì)象的話 應(yīng)該是不需要手動(dòng)去釋放的把?

  • 暫無評(píng)論
walkor 打賞

函數(shù)里臨時(shí)變量不需要手動(dòng)unset,臨時(shí)變量都會(huì)自動(dòng)gc的。
全局變量或者靜態(tài)變量需要手動(dòng)unset

  • 暫無評(píng)論
bigman

ok

  • 暫無評(píng)論
年代過于久遠(yuǎn),無法發(fā)表回答
??