Maison  >  Article  >  développement back-end  >  Méthode de clonage d'objet orienté objet PHP

Méthode de clonage d'objet orienté objet PHP

巴扎黑
巴扎黑original
2017-04-17 14:38:581820parcourir

Nous savons déjà que lors de l'appel d'un objet à l'aide d'une référence pass-by, l'appel réel est le même objet. Parfois, il est nécessaire de créer une copie de l'objet. Lors de la modification de l'objet d'origine, nous ne voulons pas. pour affecter la copie. En PHP, vous pouvez utiliser l'objet actuel pour cloner un objet identique. La copie clonée est complètement indépendante des deux objets d'origine et n'interfère pas l'un avec l'autre.

Prenons un exemple simple pour voir comment utiliser les clones :

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
protected $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;                               //将实例化的类再克隆出来一个
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();

Les résultats des exemples ci-dessus sont tous « Je veux jouer à Yasuo mid laner ».

Ci-dessus, nous avons dit que la copie clonée est indépendante de l'original et n'interfère pas les unes avec les autres. Qu'est-ce que cela signifie ?

C'est toujours le même exemple que ci-dessus, avec juste quelques modifications.

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
public $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;
$character2->location = &#39;上单&#39;;
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();

Les résultats de l'exemple ci-dessus sont « Je veux jouer à Yasuo sur la voie médiane » et « Je veux jouer sur la voie supérieure de Yasuo ».

Comme le montre l'exemple, la copie clonée et les deux objets originaux sont complètement indépendants et n'interfèrent pas l'un avec l'autre.

Utilisation de __clone

Souvent, nous souhaitons non seulement cloner un objet, mais également que l'objet ait ses propres propriétés et méthodes. Ensuite, nous devons créer une méthode __clone dans la classe. Cette méthode est similaire au constructeur et au destructeur dans le sens où elle n’est pas appelée directement.

Prenons l'exemple ci-dessus comme exemple :

<?php
header("content-type:text/html;charset=utf-8");
class Character{                                                       //定义一个角色类
public $name;
public $location;
function __construct($name , $location)              //创建构造函数
{
$this->name = $name;
$this->location = $location;
}
function __clone(){
$this -> location = &#39;上单&#39;;
}
function play(){                                                      //创建方法
echo &#39;我要玩&#39; .  $this->name.$this->location;
}
}
$character1 = new Character(&#39;亚索&#39;,&#39;中单&#39;);                //实例化一个类
$character2 = clone $character1;
$character1->play();                                                    //调用方法执行
echo &#39;<br/>&#39;;
$character2->play();

Une bonne caractéristique de la méthode __clone est qu'elle peut être appelée après avoir créé une copie en utilisant le comportement par défaut, de sorte qu'à ce stade étape, vous ne pouvez modifier que ce que vous souhaitez modifier.

La fonctionnalité la plus courante ajoutée à la méthode __clone est de garantir que les propriétés de classe gérées comme références sont copiées correctement. Si vous souhaitez cloner une classe contenant une référence à un objet, vous devrez peut-être obtenir une deuxième copie de l'objet, et non une deuxième référence à l'objet, c'est pourquoi vous ajoutez ce code dans la méthode __clone.

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