考慮看看一些舊代碼後:由拆解在PHP
$Cache->destroy();
但是在PHP 5.3
//Nothing like a destructor!!
function destroy() {
settype(&$this, 'null');
}
而且叫我得到 推薦使用:在調用的時候傳遞通過引用具有已在/blah/-cache-.php上在線154中棄用
我應該怎麼做?
考慮看看一些舊代碼後:由拆解在PHP
$Cache->destroy();
但是在PHP 5.3
//Nothing like a destructor!!
function destroy() {
settype(&$this, 'null');
}
而且叫我得到 推薦使用:在調用的時候傳遞通過引用具有已在/blah/-cache-.php上在線154中棄用
我應該怎麼做?
您可以通過刪除$this
中的&
來滿足您的直接問題,但是整個構造對我來說沒有意義。如果從對象的上下文中銷燬$this
並非明顯無效,那絕對不是好習慣。
要消滅的對象,一個簡單的
unset($Cache);
會做。
如果想要在對象被銷燬時執行某些東西,應該在類中定義一個destructor。 (在你的destroy()
代碼中的評論說,這不是這裏的重點:) :)
只要摧毀像正常的對象。
unset($Cache);
我不知道他們爲什麼會在上面看起來很骯髒。請記住,如果對象的指針位於不同的地方,您將需要取消所有這些指針 - 而不僅僅是這一行。 (單身人士是一個例子)
你得到的錯誤與析構函數無關。這個錯誤僅僅是因爲你試圖在函數調用中通過引用傳遞$ this。
PHP用於允許這樣做,但在當前版本的PHP中,如果您想通過引用傳遞某些內容,則應在函數聲明中指定它。
因此,你的函數調用應該是這樣的:
settype($this, 'null');
(即不帶&
)。 (順便說一句 - 「空」在一個字符串???的話,就是你的意思?)
如果你想通過裁判通過,你的函數應該是這樣的:
function settype(&$object, $secondparameter) {
...whatever the function does...
}
即在函數參數中使用&
。
此規則適用於所有情況下的PHP。正如我所說的,它與你的析構函數方法無關,或與它是一個對象無關;這就是你在現代PHP中通過引用傳遞的方式。
現在到問題的其他部分:析構函數方法。
PHP確實允許自動析構函數,你的類中這樣寫的:
function __destruct() {
print "Destroying " . $this->name . "\n";
}
如果你寫的代碼中,__destruct()方法將被當對象被銷燬調用。這可能是也可能不是你想要的 - 取決於你希望如何工作。當對象的所有引用都未設置或超出範圍時,該對象將被銷燬。如果你通過引用傳遞對象句柄,這可能不會在你期望的時候發生 - 即,即使當你說unset($myobject);
時,對象可能會在內存中持續存在。在這種情況下,PHP程序運行完成後,它可能只會被銷燬。如果是這種情況,並且您需要早於這種情況,那麼您可以繼續使用已有的方法,並將其稱爲「明確」。
希望能回答你的問題。
+1用於解釋錯誤消息的背景 – 2010-10-29 16:46:52