PHP对象如何进行浅复制
程序员文章站
2022-04-02 12:54:33
...
赋值时,引用赋值相当于取了一个别名;对其中一个修改会影响另一个。PHP中赋值时,普通对象是深拷贝,但对对象来说是浅复制。也就是说,对象的赋值是引用赋值。下面介绍一下php对象的浅复制,有需要的可以参考参考。
上周遇到一个低级的 bug,半天没有找到问题所在,今天在蹲坑的时候,不知道为何脑子中想起了这个 bug, 然后突然意识到是否是因为没有进行对象 clone 造成的。
果然,问题就是因为在多次遍历同一个 laravel collection 时,反复对同一个对象的属性进行操作,导致后面的操作覆盖了之前的操作,所以在最终返回结果时,只保留了最后一次的操作结果。
浅复制(shallow copy)
$copy_of_object = clone $object;
来做一个测试
<?php class City { public $name; } $c1 = new City; $c1->name = "烟台"; echo $c1->name; // 烟台 echo PHP_EOL; $c2 = $c1; echo $c2->name; // 烟台 echo PHP_EOL; $c1->name = "威海"; echo $c2->name; // 威海 echo PHP_EOL; $c3 = clone $c1; echo $c3->name; // 威海 echo PHP_EOL; $c1->name = "青岛"; echo $c3->name; // 威海 echo PHP_EOL;
测试结果
php /tmp/test.php 烟台 烟台 威海 威海 威海
为何称之为浅复制呢?
与之对应的是深复制。因为浅复制情况下,对象的属性如果还是对象的话,该属性还是指向同一个对象。
推荐学习:php视频教程
以上就是PHP对象如何进行浅复制的详细内容,更多请关注其它相关文章!
上一篇: apache不能正常解析php怎么办
下一篇: php date函数出错怎么办
推荐阅读
-
你是否在为如何学习进行PHP代码审计烦恼?
-
php 如何配合easyui 实现,datagrid1点击某行,然后datagrid2 进行动态查询。
-
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间,_PHP教程
-
javascript - JQuery 如何传递input file的内容至PHP进行处理
-
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)_php技巧
-
php如何使用crypt()函数进行加密的实例代码
-
如何复制一台与当前 Linux 系统环境相同的主机,以便进行升级测试?
-
PHP 5.0对象模型深度探索之对象复制_PHP
-
如何找出PHP对象数组的差值?
-
PHP如何高效地对根据键值对数组元素进行归类?