Maison  >  Article  >  développement back-end  >  [classes et objets php] copie d'objet

[classes et objets php] copie d'objet

不言
不言original
2018-04-16 10:29:401483parcourir

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;

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 )

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
        )

)
*/?>

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!

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