当前位置: 首页 > 后端技术 > PHP

PHP5之后关于“默认情况下对象通过引用传递”的想法

时间:2023-03-30 00:35:59 PHP

首先从这个线程引发了这篇博文:https://segmentfault.com/q/10...经过一番思考,我决定把我的答案和把想法写成博客做个记录。如果有什么不对的地方,请指正。指针和引用首先,引用和指针是不同的。C语言中指针的概念是表示一个变量的地址;PHP中的引用表示变量2是变量1的别名,如:$a='hello';$b=&$a;这时候可以说$b就是$a,$a就是$b;他们是一样的东西。比如你的英文名字是Steven,中文名字是二狗子。不管你的名字是什么,它就是你。PHP中的对象传递然后说说“PHP5以后默认PHP对象是引用传递的。例如:classObj(){public$o='hello';}$a=newObj();$b=$a;$c=&$a;这时候$b=$a其实并不代表$b是对$a的引用,$a和$b可以说是没有任何关系的。实例化Obj类得到的对象,也就是说,此时$a和$b都是实例化Obj后得到的对象,而$b=$a只会产生$b是从$a实例化出来的Obj之后的引用;那么此时看$c=&$a,$c是$a的引用,也就是说$c是$a;假设:unset($b);unset($c);那么unset($b)只是删除了实例化Obj后得到的对象的一个??引用计数,unset($c)删除了$a和$b(因为两者代表的是同一个东西);同理,假设:$a->o='test';echo$b->o;//string'test'表示$a和$b没有任何关系,但是有关系实例化后的对象,也就是$a改变的是实例化最后一个对象的数据,而$b的调用也是调用了这个对象的数据,所以好像跟某个层次有关。还有一个假设不太清楚,从我们web的业务逻辑来看,用户A和用户B都登录了网站,用户A更改了存储评论的数据表中的数据。如果用户B去取这个数据,用户B就会得到修改后的数据,但实际上,用户A和用户B是没有关系的。引用其实类似于用户A在手机和电脑上同时登录,然后修改评论数据表中的数据。不管是在手机上还是电脑上重新获取数据,都是修改的,但实际上面是一个人。引用计数在我的文章中提到了一个术语引用计数,这涉及到PHP中的另一个问题,就是PHP的引用计数。这个可以参考PHP官方文档,我觉得很详细:http://php.网络/手册/zh/专长...