Copier et cloner des objets en php

无忌哥哥
Libérer: 2023-04-01 21:20:02
original
2395 Les gens l'ont consulté

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

//Instancier la classe membre Member et créer l'objet membre $member

$member = new Member('peter','peter@php.cn',1000);
Copier après la connexion

//Test d'accès

echo $member->score;
Copier après la connexion
Copier après la connexion
Copier après la connexion

//Copiez l'objet membre

$member1 = $member;
Copier après la connexion

//Utilisez le nouveau nom de variable $member1 pour mettre à jour les informations sur l'objet

$member1->score = 2000;
Copier après la connexion

//Utilisez le nouvel objet Nom de variable $member1 accède à

echo $member1->score;
echo &#39;<hr>&#39;;
Copier après la connexion

// Utilisez le nom d'objet d'origine $member pour accéder à

echo $member->score;
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

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

//Vérifions d'abord l'attribut score valeur de la variable objet $member2

echo $member2->score; //目前是原始值2000
Copier après la connexion

//Modifier la valeur du score

$member2->score = 5000;
echo &#39;<hr>&#39;;
Copier après la connexion

//Vérifier à nouveau le score dans $member2

echo $member2->score; //新值5000
echo &#39;<hr>&#39;;
Copier après la connexion

/ /Pensez-y, ma modification affectera-t-elle la valeur de l'attribut score de la variable $member d'origine ?

echo $member->score; //发现原对象的score属性值仍为2000,未发生变化
Copier après la connexion

//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-dessous

var_dump($member); //变量id是1
var_dump($member2); //变量id是2
Copier après la connexion
//Les ID de ces deux variables d'objet sont différents, indiquant qu'il s'agit de deux objets complètement différents

//Ce qui suit est à compléter une telle tâche : lors de la création d'un nouvel objet membre, ajouter le membre Effacer les points ? Que faut-il faire

//Créer une méthode magique de clonage __clone() dans la classe Member pour prétraiter le nouvel objet cloné

//Démontrer à nouveau une fois

//Voir le score actuel

echo $member->score;
Copier après la connexion
Copier après la connexion
Copier après la connexion
//Cloner pour créer un nouvel objet $member3

$member3 = clone $member;
Copier après la connexion
//Afficher le score de la valeur $member3 du nouvel objet pour vérifier si __clone() dans la classe prend effet ?

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:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!