Maison  >  Article  >  développement back-end  >  Comment copier superficiellement des objets PHP

Comment copier superficiellement des objets PHP

醉折花枝作酒筹
醉折花枝作酒筹avant
2021-06-23 16:08:131545parcourir

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.

Comment copier superficiellement des objets PHP

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer