2016-07-21 31 views
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內容或對象可以最終刪除。

回答

2

回答您的問題:

當您取消設置值時,您只是刪除對該變量的引用,實際上並未刪除該值。當沒有對該變量的引用時,它將被刪除。

從PHP文檔(http://php.net/manual/en/function.unset.php

未設置()銷燬指定的變量

+0

所以,當釋放的內存進行復位($對象)? – MikeBau

+0

沒有。取消設置將刪除對該$對象的引用。 – user3091574

+0

所以答案是:**對象(內容)不會被刪除,直到所有的引用被刪除?** – MikeBau

相關問題