2011-04-09 83 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手册。