[classes et objets php] copie d'objet

不言
Libérer: 2023-03-23 22:12:02
original
1450 Les gens l'ont consulté

Le contenu de cet article concerne la copie d'objets [classes et objets php], qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Copie d'objet.

Scénarios d'utilisation :

1 Si vous disposez d'un objet fenêtre GTK, l'objet contient des ressources liées à la fenêtre. Vous souhaiterez peut-être copier une nouvelle fenêtre, en conservant toutes les mêmes propriétés que la fenêtre d'origine, mais il doit s'agir d'un nouvel objet (car s'il ne s'agit pas d'un nouvel objet, les modifications apportées à une fenêtre affecteront l'autre fenêtre).

2. Si l'objet A contient une référence à l'objet B, lorsque vous copiez l'objet A et que vous souhaitez que l'objet utilisé ne soit plus l'objet B mais une copie de B, alors vous devez obtenir l'objet A. une copie de .

Implémentation : Via le mot-clé clone (qui appellera si possible la méthode __clone() de l'objet), la méthode __clone() dans l'objet ne peut pas être appelée directement.

    $copy_of_object = clone $object;
Copier après la connexion

Lorsqu'un objet est copié, PHP 5 effectuera une copie superficielle de toutes les propriétés de l'objet. Toutes les propriétés de référence seront toujours des références aux variables d'origine.

    void __clone ( void )
Copier après la connexion

Une fois la copie terminée, si la méthode __clone() est définie, la méthode __clone() dans l'objet nouvellement créé (l'objet généré par la copie) sera appelée et pourra être utilisée pour modifier les attributs .valeur (si nécessaire).

Example #1 复制一个对象<?phpclass SubObject{
    static $instances = 0;    public $instance;    public function __construct() {
        $this->instance = ++self::$instances;
    }    public function __clone() {
        $this->instance = ++self::$instances;
    }
}class MyCloneable{
    public $object1;    public $object2;    function __clone()
    {

        // 强制复制一份this->object, 否则仍然指向同一个对象
        $this->object1 = clone $this->object1;
    }
}$obj = new MyCloneable();$obj->object1 = new SubObject();$obj->object2 = new SubObject();$obj2 = clone $obj;print("Original Object:\n");
print_r($obj);/*
Original Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
*/print("Cloned Object:\n");
print_r($obj2);/*
Cloned Object:
MyCloneable Object
(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
*/?>
Copier après la connexion

Recommandations associées :

[Classes et objets php] méthode magique

[classes et objets php] traversée

[classes et objets php] surcharge

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!