Maison > Article > développement back-end > Comment copier superficiellement des objets PHP
Lors de l'attribution, l'attribution d'une référence équivaut à prendre un alias ; la modification de l'un affectera l'autre ; Lors de l'attribution de valeurs en PHP, les objets ordinaires sont copiés en profondeur, mais les objets sont copiés superficiellement. En d’autres termes, l’affectation d’un objet est une affectation de référence. Ce qui suit présente la copie superficielle des objets PHP. Vous pouvez vous y référer si nécessaire.
J'ai rencontré un bug de bas niveau la semaine dernière et je n'ai pas pu trouver le problème pendant longtemps. Aujourd'hui, alors que j'étais accroupi dans la fosse, je ne savais pas. pourquoi ce bug m'est venu à l'esprit, puis j'ai soudainement réalisé Vérifiez s'il est causé par le fait que l'objet n'est pas cloné.
Effectivement, le problème est que lorsque vous parcourez plusieurs fois la même collection Laravel, les propriétés du même objet sont exploitées à plusieurs reprises, ce qui entraîne l'écrasement des opérations précédentes par les opérations suivantes. Ainsi, lorsque le résultat final est renvoyé, seul le Le résultat de la dernière opération.
Copie superficielle
$copy_of_object = clone $object;
Faisons un test
<?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;
Résultats des tests
php /tmp/test.php 烟台 烟台 威海 威海 威海
Pourquoi est-ce appelé copie superficielle ?
La contrepartie est une copie profonde. Car dans le cas d'une copie superficielle, si les attributs de l'objet sont toujours des objets, les attributs pointent toujours vers le même objet.
Apprentissage recommandé : Tutoriel vidéo 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!