0
我對PHP對象在某些情況下被刪除之後的行爲表示懷疑,做了一些測試。是代碼:PHP,是在某些情況下創建的對象的副本?
class ItemRecord
{
private $id;
protected $name;
public function __contruct($pID, $pName)
{
$this->id = $pID;
$this->name = $pName;
}
public function setName($pName)
{
$this->name = $pName;
}
public function getName()
{
return $this->name;
}
}
我創建ItemRecord類的一些對象,然後,把它們添加到對象列表(數組):
$objList = array();
$obj1 = new ItemRecord("1", "Object 1");
$objList[] = $obj1;
$obj2 = new ItemRecord("2", "Object 2");
$objList[] = $obj2;
如果我更改了「原始」某些屬性對象,例如:
$obj1->setName("FOO");
然後我會盡力展現「關聯性」元素的列表與原始對象的內容:
echo($objList[0]->getName()); //-> Of course, It displays "FOO"
所以,如果我刪除的對象不應該在名單存在了
unset($obj1); unset($obj2);
但它不是這樣的!
echo($objList[0]->getName());
它繼續顯示「FOO」!和對象繼續使用現有,以及...
所以我的問題是:在這種情況下,當你刪除一個對象,複製操作發生在刪除時間?
還有其他好奇的情況下,像這種奇怪的行爲,但現在我會
更新:的答案,之後的事情已經在註釋中談到。如果unset()函數可能返回刪除結果,那麼它可能會很好。例如:'true',如果var內容或對象可以最終刪除。
所以,當釋放的內存進行復位($對象)? – MikeBau
沒有。取消設置將刪除對該$對象的引用。 – user3091574
所以答案是:**對象(內容)不會被刪除,直到所有的引用被刪除?** – MikeBau