2010-10-20 40 views
4

我正在使用PHP 5.2。如果我在一個頁面上新建一個對象,這個對象何時會被破壞?當用戶轉到另一個.php頁面時,該對象是否自動被破壞,或者我需要明確調用__destructor?PHP對象生命時間

回答

9

它將在頁面加載結束時被破壞(從內存中卸載),或者如果您以前取消所有對它的引用。您不必手動銷燬它,因爲PHP總是清除腳本末尾的所有內存。

其實你應該從來沒有自己調用__destruct。當你想銷燬它時,使用unset來取消對對象的引用。 __destruct其實不是會破壞你的對象,它只是一個函數,它會在破壞之前被PHP 自動調用,所以你有機會在它被破壞之前進行清理。您可以根據需要多次調用__destruct,而無需重新記憶。

但是,如果您將對象保存到會話變量中,它將「睡眠」而不是被銷燬。請參閱__sleep的手冊。當然,它仍然會從內存中卸載(並保存到磁盤),因爲PHP在腳本之間沒有任何內存。

+0

爲什麼你說如果你將它保存到會話中,這個對象將不會被銷燬? – 2010-10-23 21:58:44

+2

它會被銷燬,從內存中刪除,甚至可能會運行析構函數,但之後可以恢復它(在下一頁)。也許我不應該提到它,因爲它似乎與這個問題沒有關係。 – 2010-10-23 22:29:44

0

噹噹前腳本中沒有對它們的引用時,所有對象都被銷燬(調用__destruct方法)。當您包含該對象的所有變量或腳本結束時,會發生這種情況。