php对象引用
直接上代码!如下:
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。求助一下!谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
php就是这样定义的,对象类型的变量,不存储对象内容,仅仅存储了一个指向真正的变量内容的引用,
对于一个对象变量来说,=意味着浅拷贝,仅仅添加一个对象内容的引用,不论前边是否有&
如果你要复制一个全新的对象,申请全新的内存,要使用clone
$u2=clone $u1;
至于null的问题,也就容易理解了:
$u2=$u1给u2添加的是指向真正变量的引用而不是指向u1的。你把$u1重新赋值为null,$u2的引用并没有影响。
$u1 = null
null
的变量赋为null
了$u2 = object
$u1
赋给它了,就相当于它这个容器里现在装着object
,这里你可以理解成它克隆了一个一摸一样的$u1
$u3 = null
$u3
时按引用传递,它等于$u1
的内存地址,$u1
改变了它也就变了当然以上只是个人观点,相关流程术语不是很精通,学识不够还望大佬能及时指正
参考资料:PHP的对象和引用赋值
$u1创建对象赋值后,就储存着对象的引用。
$u2赋值后,储存着和$u1一样的内容,也就是对象的引用。虽然他们的内容一样,但却是完全不相干的两个变量。所以当给$u1赋值时不会影响到$u2。但是通过$u1修改对象的属性可以从$u2反映出来。
而$u3是对$u1的引用,换句话说,$u3就是$u1,就好像一个人在不同的地方用不同的名字,但还是同一个人。所以对$u1的修改也会影响到$u3 。