猿问

php的 变量赋值类型为对象的一些问题

图示所写 变量赋的值为对象类型默认是引用传值。也就是指向同一个内存空间

下面给出另一段代码和结果图
https://img.mukewang.com/5c8f697f0001a60f08000491.jpg

结果如下
https://img2.mukewang.com/5c8f6980000106f706040283.jpg

问题:既然变量赋值类型为对象都是引用传值,为什么结果来看,$assigned更像是赋值传值,如果是引用传值,改变为null,三个变量不是都应该为null吗?!

慕仙森
浏览 676回答 3
3回答

临摹微笑

答案已自行百度到 想了解的看这篇文章 https://www.zhihu.com/questio...

浮云间

不知道你知不知道深复制和浅复制,值的复制,是深复制,就是说改变了就改变了,不会影响另外一个:例如$a=1;$b=$a;$a=2echo $a;//2echo $b;//1 对象的复制是浅复制,他的更改会影响到另外一个,这个楼主你应该懂,所以,当assigned=$instance,后,对instance的修改,会影响assigned ,如果没有最后的null,$instance和assigned是一样的。关键就是最后的null,null其实也是一个对象,说到这里,我相信你应该明白了,$instance=null,这个时候,instance被指向了另外一个对象(跟assigned没半毛钱关系了),而reference又是指向instance,跟着也指向了null对象,所以你明白了么?
随时随地看视频慕课网APP
我要回答