php对象引用

发布于 2022-09-04 13:06:30 字数 410 浏览 14 评论 0

直接上代码!如下:

class User  {
 public $name = "hello";
 }
$u1 = new User();
$u2 = $u1; 
$u3 = &$u1;
$u1->name = "world";
$u1 = null;
var_dump($u1,$u2,$u3);

输出结果如下:

  1. NULL

  2. class User#1 (1) { public $name =>string(5) "world"}

  3. NULL

请问下,这里的$u2 = $u1;是怎么执行的?改变$u1对象的属性,$u2会跟着改变。但是将$u1赋NULL值却不影响$u2。求助一下!谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

千里故人稀 2022-09-11 13:06:30

php就是这样定义的,对象类型的变量,不存储对象内容,仅仅存储了一个指向真正的变量内容的引用,
对于一个对象变量来说,=意味着浅拷贝,仅仅添加一个对象内容的引用,不论前边是否有&
如果你要复制一个全新的对象,申请全新的内存,要使用clone
$u2=clone $u1;

至于null的问题,也就容易理解了:
$u2=$u1给u2添加的是指向真正变量的引用而不是指向u1的。你把$u1重新赋值为null,$u2的引用并没有影响。

揪着可爱 2022-09-11 13:06:30
输出结果原因
$u1 = null因为在最后一步你讲null的变量赋为null
$u2 = object因为第二步你将是实列化的$u1赋给它了,就相当于它这个容器里现在装着object,这里你可以理解成它克隆了一个一摸一样的$u1
$u3 = null因为$u3时按引用传递,它等于$u1的内存地址,$u1改变了它也就变了

当然以上只是个人观点,相关流程术语不是很精通,学识不够还望大佬能及时指正

芯好空 2022-09-11 13:06:30

当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。

参考资料:PHP的对象和引用赋值

原野 2022-09-11 13:06:30

$u1创建对象赋值后,就储存着对象的引用。

$u2赋值后,储存着和$u1一样的内容,也就是对象的引用。虽然他们的内容一样,但却是完全不相干的两个变量。所以当给$u1赋值时不会影响到$u2。但是通过$u1修改对象的属性可以从$u2反映出来。

而$u3是对$u1的引用,换句话说,$u3就是$u1,就好像一个人在不同的地方用不同的名字,但还是同一个人。所以对$u1的修改也会影响到$u3 。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文