在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都不为null,看起来$person1和$person2根本没有指向同一个东西。
但当我做如下事情时:
$person1 = new Person();
$person2 = $person1;
$person2->first_name = "programming";

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

我得到了相同的东西“编程”,所以我认为$person1和$person2都指向相同的东西。
有人能解释一下为什么会这样吗?

最佳答案

不要把指针和引用混在一起。在$person1 = null;之后,这个变量引用了一些不同的东西,因为您给这个变量分配了一些不同的东西。与

$person1 = $person2 = new Person;

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

09-20 19:34