PHP对象如何进行浅复制

醉折花枝作酒筹
Libérer: 2023-03-10 20:00:01
avant
1447 Les gens l'ont consulté

赋值时,引用赋值相当于取了一个别名;对其中一个修改会影响另一个。PHP中赋值时,普通对象是深拷贝,但对对象来说是浅复制。也就是说,对象的赋值是引用赋值。下面介绍一下php对象的浅复制,有需要的可以参考参考。

PHP对象如何进行浅复制

上周遇到一个低级的 bug,半天没有找到问题所在,今天在蹲坑的时候,不知道为何脑子中想起了这个 bug, 然后突然意识到是否是因为没有进行对象 clone 造成的。

果然,问题就是因为在多次遍历同一个 laravel collection 时,反复对同一个对象的属性进行操作,导致后面的操作覆盖了之前的操作,所以在最终返回结果时,只保留了最后一次的操作结果。

浅复制(shallow copy)

$copy_of_object = clone $object;
Copier après la connexion

来做一个测试

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;
Copier après la connexion

测试结果

php /tmp/test.php 烟台 烟台 威海 威海 威海
Copier après la connexion

为何称之为浅复制呢?

与之对应的是深复制。因为浅复制情况下,对象的属性如果还是对象的话,该属性还是指向同一个对象。

推荐学习:php视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:sunzhongwei.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!