直接上代码!如下:
class User {
public $name = "hello";
}
$u1 = new User();
$u2 = $u1;
$u3 = &$u1;
$u1->name = "world";
$u1 = null;
var_dump($u1,$u2,$u3);
输出结果如下:
NULL
class User#1 (1) { public $name =>string(5) "world"}
NULL
请问下,这里的$u2 = $u1;是怎么执行的?改变$u1对象的属性,$u2会跟着改变。但是将$u1赋NULL值却不影响$u2。求助一下!谢谢!
php就是这样定义的,对象类型的变量,不存储对象内容,仅仅存储了一个指向真正的变量内容的引用,
对于一个对象变量来说,=意味着浅拷贝,仅仅添加一个对象内容的引用,不论前边是否有&
如果你要复制一个全新的对象,申请全新的内存,要使用clone
$u2=clone $u1;
至于null的问题,也就容易理解了:
$u2=$u1给u2添加的是指向真正变量的引用而不是指向u1的。你把$u1重新赋值为null,$u2的引用并没有影响。