2012-06-10 69 views
0
<?php 
class SimpleClass 
{ 
    public $var1; 
} 
$instance = new SimpleClass(); 
$assigned = $instance; 
$reference =& $instance; 
$instance->var1 = '$assigned will have this value'; 

$instance = null; // $instance and $reference become null 

var_dump($instance); 
var_dump($reference); 
var_dump($assigned); 
exit; 
?> 

任何人都可以幫忙嗎?以上代碼的輸出爲什麼是:PHP5 - 對象分配問題

NULL 
NULL 
object(SimpleClass)#1 (1) { 
    ["var"]=> 
    string(30) "$assigned will have this value" 
} 

我可以理解爲NULL$instance$reference怎麼來$assigned不成了NULL。 根據我在PHP 5中的理解,對象都是通過引用的,所以$assigned也包含引用,在這種情況下它也應該變成NULL

除了我的理解,用PHP手冊編寫的內容是:「當將一個已經創建的類的實例分配給一個新的變量時,新的變量將訪問與分配的對象相同的實例,這種行爲是相同的當傳遞實例到一個函數。「

任何人都可以解釋?

回答

0

下面線從PHP手冊Object and reference

甲PHP參考是一個別名,它允許兩個不同的變量寫入到相同的值。從PHP 5開始,對象變量不再包含對象本身的值。 它只包含允許對象訪問器查找實際對象的對象標識符。當一個對象通過參數發送,返回或分配給另一個變量時,不同的變量不是別名:它們包含指向同一對象的標識符的副本。

0

$ instance = null; // $ instance和$ reference變爲空

此時,您已將它們與對象斷開鏈接。就這樣。該對象不會被刪除,因爲我們有另一個變量鏈接到它。

此外,使用var_dump($ GLOBALS),您可以看到$ assigned和$ instance & $ reference對之間的差異。