在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 :(得分:2)
不要将指针与引用混合在一起。在$person1 = null;
之后,此变量引用不同的内容,因为您为变量分配了不同的内容。与
$person1 = $person2 = new Person;
两者都引用相同的单个对象实例。使用$person2->first_name
,您可以更改此对象,而不是仍然引用该对象的变量。
答案 1 :(得分:0)
在第一个示例中将$ person1设置为null后,它不再引用您创建的Person对象,但$ person2仍然是。
在第二个例子中,$ person和$ person2都引用同一个对象。
请参阅References上的PHP手册。