Maison > développement back-end > Problème PHP > Comment copier superficiellement des objets PHP

Comment copier superficiellement des objets PHP

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

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

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

Résultats des tests

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

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!

É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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal