对象参考

时间:2011-04-09 01:35:28

标签: php oop

在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都指向同一件事。

有人可以向我解释为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

不要将指针与引用混合在一起。在$person1 = null;之后,此变量引用不同的内容,因为您为变量分配了不同的内容。与

$person1 = $person2 = new Person;

两者都引用相同的单个对象实例。使用$person2->first_name,您可以更改此对象,而不是仍然引用该对象的变量。

答案 1 :(得分:0)

在第一个示例中将$ person1设置为null后,它不再引用您创建的Person对象,但$ person2仍然是。

在第二个例子中,$ person和$ person2都引用同一个对象。

请参阅References上的PHP手册。