php clone new 的区别,clone和=&的区别

根据你@Conqueror1st 的回答,我做了这个图,不知道是否正确。

bd2d70c78eb9b2712d3b025f0c90dd73.png

(1)$obj1 =& $obj

两个对象变量引用赋值,保存的是同一个地址的标识符。

这种情况下,$obj1=null的话,也就是相当于ID1被清空,所以这时候对象A就没有引用了,触发了析构函数。

(2)$obj2=$obj

两个对象变量赋值,值相同都是标识符,但是存储在不同的地址,这个标识符都指向同一个地址——对象A。

这种情况下

1)$obj2=null,相当于ID2被清空,那么ID2指向对象A的引用没有了,这时候对象A还有ID1在引用,所以没有触发析构函数。

2)修改$obj2的属性,比如$obj->name = 'James',这时候修改的是指针指向的对象A的内容,所以一样在引用对象A的$obj也会同步修改了name这个属性。

(3)$obj3=clone $obj

对象复制,新增一个内存地址存储对象B,B的所有属性和方法和A一模一样,只是地址不同。当然,标识符也是不同的地址和内容(内容不同是因为指向不同的地方)

这种情况下,修改$obj3的属性对$obj毫无影响,因为大家都是殊途殊归!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

未知是否这样理解。如果有错千万指正啊o(╯□╰)o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值