Maison  >  Article  >  développement back-end  >  Quelle est la méthode de clonage php ?

Quelle est la méthode de clonage php ?

藏色散人
藏色散人original
2020-10-14 16:40:313690parcourir

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.

Quelle est la méthode de clonage php ?

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 &#39;Cat类启动&#39;;
$this->name = $name;
}
function __destruct(){
echo &#39;Cat类结束&#39;;
}
}
$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 &#39;Cat类启动&#39;;
$this->name = $name;
}
function __destruct(){
echo &#39;Cat类结束&#39;;
}
}
$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!

Déclaration:
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