Maison > Article > développement back-end > Quelle est la méthode de clonage php ?
La méthode de clonage php fait référence au clonage d'objet PHP Lorsque nous attribuons l'entier $a à une variable $b, $b est une "copie" de $a, mais les deux ne sont pas liés au changement $A. la valeur de b n'affectera pas $a, et un changement dans la valeur de $a n'affectera pas $b.
Recommandé : "Tutoriel vidéo PHP"
Clonage d'objets PHP : méthode __clone()
Clone d'objets : méthode __clone()
Quand on assigne l'entier $a à une variable $b, $b est une "copie" de $a, mais deux Les deux sont non pertinent. Les changements dans la valeur de $b n’affecteront pas $a, et les changements dans la valeur de $a n’affecteront pas $b. La même chose est vraie pour les tableaux, mais c'est différent pour les objets. Lorsque l'instance d'objet $a est affectée à une variable $b, $b n'est pas une "copie" de $a, mais une référence à $a. affectera $a, et le changement de valeur de $a affectera également $b.
Par exemple :
<?php class Cat{ public $name; function __construct($name){ echo 'Cat类启动'; $this->name = $name; } function __destruct(){ echo 'Cat类结束'; } } $a = new Cat("默默");//实例化类,调用无参数的构造方法 //$c被销毁时自动调用析构方法 $b=$a; echo "改变之前:<br>"; echo "a->name:".$a->name."<br>"; echo "b->name:".$b->name."<br>"; $a->name="琳琳"; echo "改变之后:<br>"; echo "a->name:".$a->name."<br>"; echo "b->name:".$b->name."<br>"; ?>
Résultat d'exécution :
Avant que la classe Cat ne commence à changer :
a->name : silencieusement
b->name : silencieusement
Après le changement :
a->name : Linlin
b->name : Linlin
Mais souvent, nous avons besoin d'une copie de l'objet, pas seulement d'une référence à l'objet. A ce stade, on peut utiliser le mot-clé clone, mais sachez que s'il y a une référence dans l'attribut de classe "cloné", la référence est conservée c'est-à-dire la référence dans la copie et la référence dans la classe d'origine. les deux pointent vers la même mémoire.
Par exemple :
<?php class Cat{ public $name; function __construct($name){ echo 'Cat类启动'; $this->name = $name; } function __destruct(){ echo 'Cat类结束'; } } $a = new Cat("默默");//实例化类,调用无参数的构造方法 //$c被销毁时自动调用析构方法 $b=clone $a; echo "改变之前:<br>"; echo "a->name:".$a->name."<br>"; echo "b->name:".$b->name."<br>"; $a->name="琳琳"; echo "改变之后:<br>"; echo "a->name:".$a->name."<br>"; echo "b->name:".$b->name."<br>"; ?>
Résultat d'exécution :
Avant le changement de démarrage de la classe Cat :
a->name. : silencieusement
b->nom : Momo
Après changement :
a->nom : Linlin
b->nom : Momo
Fin de la classe Cat Fin de la classe Cat
L'attribut $name dans cette classe reçoit une référence, donc lorsque vous utilisez le mot-clé clone pour copier, le nom dans la "copie" et le $ le nom dans "l'original" pointe vers la même variable
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!