* Copie et clonage d'objets
* 1. Par défaut, les objets sont passés par référence (en fait une copie de l'identifiant de l'objet, qui sera discuté en détail plus tard)
* 2. Autrement dit, les deux variables objet font en réalité référence au même objet
* 3. Si vous souhaitez créer un nouvel objet, vous devez utiliser le mot-clé clone pour cloner l'objet actuel
* 4 .Lors de l'utilisation du mot-clé clone, s'il y a __clone() dans la classe, il sera automatiquement appelé
* 5. La méthode __clone() s'exécute sur l'objet nouvellement créé
* 6.__clone() peut contrôler ce que nous copions et les opérations de base à effectuer lors du clonage
class Member { //声明三个私有属性 private $name; //会员名 private $email; //会员邮箱 private $score; //会员积分 //构造方法 public function __construct($name='',$email='',$score=0) { $this->name = $name; $this->email = $email; $this->score = $score; } //查询器(暂时省略访问控制) public function __get($name) { return $this->$name; } //设置器(暂时省略访问控制) public function __set($name,$value) { $this->$name = $value; } //克隆魔术方法在对象克隆时自动调用,针对新对象进行初始化操作 public function __clone() { $this->score = 0; } }
//Instancier la classe membre Member et créer l'objet membre $member
$member = new Member('peter','peter@php.cn',1000);
//Test d'accès
echo $member->score;
//Copiez l'objet membre
$member1 = $member;
//Utilisez le nouveau nom de variable $member1 pour mettre à jour les informations sur l'objet
$member1->score = 2000;
//Utilisez le nouvel objet Nom de variable $member1 accède à
echo $member1->score; echo '<hr>';
// Utilisez le nom d'objet d'origine $member pour accéder à
echo $member->score;
* Conclusion :
* 1. Le résultat de la modification de la nouvelle variable Reflété dans la variable objet d'origine
* 2. Expliquez que ces deux variables pointent en fait vers le même objet
* 3. Que c'est-à-dire que l'objet est passé par référence par défaut
* 4. En d'autres termes, le deuxième nom de variable $member1 est juste un alias de la variable d'origine, et aucun nouvel objet n'est créé
* 5. On peut comprendre qu'il s'agit simplement d'un nouvel identifiant de l'objet d'origine. Juste un nouveau nom
var_dump($member1); //对象id=1 var_dump($member); //对象id=1
//Explication selon laquelle $member1 et $member sont deux objets identiques, juste avec des noms différents.
//Si vous souhaitez créer un objet complètement nouvel, vous devez Comment faire ? Vous devez utiliser le mot-clé : clone
$member2 = clone $member;
//Vérifions d'abord l'attribut score valeur de la variable objet $member2
echo $member2->score; //目前是原始值2000
//Modifier la valeur du score
$member2->score = 5000; echo '<hr>';
//Vérifier à nouveau le score dans $member2
echo $member2->score; //新值5000 echo '<hr>';
/ /Pensez-y, ma modification affectera-t-elle la valeur de l'attribut score de la variable $member d'origine ?
echo $member->score; //发现原对象的score属性值仍为2000,未发生变化
//Pourquoi est-ce parce que nous avons utilisé la technologie de clonage pour créer deux variables d'objet complètement différentes ? >
//Vérifiez ci-dessousvar_dump($member); //变量id是1 var_dump($member2); //变量id是2
echo $member->score;
$member3 = clone $member;
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!