2011-04-09 105 views
3

在PHP中,我有這個簡單的類對象引用

<?php 
class Person { 
    var $first_name = "factory method"; 
} 
?> 

我的問題是,如果我有:

$person1 = new Person(); 
$person2 = $person1; 

$person1 = null; 

var_dump($person1); 
var_dump($person2); 

什麼,我得到的是:既$ PERSON1 = NULL$ person2根本不爲空,看起來$ person1和$ person2根本沒有指向相同的東西。

但是當我做類似如下:

$person1 = new Person(); 
$person2 = $person1; 
$person2->first_name = "programming"; 

echo $person1->first_name; 
echo $person2->first_name; 

我得到了同樣的事情,「編程」,所以我覺得這兩個$ PERSON1和$ PERSON2都指向同一件事。

有人可以向我解釋爲什麼是這樣的?

+0

請參閱http://php.net/manual/en/language.oop5.references.php和評論。 – netcoder 2011-04-09 02:55:16

回答

2

不要混合指針與引用。 $person1 = null;之後這個變量指的是不同的東西,因爲你給這個變量分配了不同的東西。 With

$person1 = $person2 = new Person; 

兩者都指向相同的單個對象實例。使用$person2->first_name您可以更改此對象,而不是變量,該變量仍指向該對象。

0

在第一個示例中將$ person1設置爲null後,它不再引用您創建的Person對象,但$ person2仍然是。

在第二個示例中,$ person和$ person2都指向同一個對象。

請參閱References上的PHP手冊。