Der Inhalt dieses Artikels befasst sich mit dem Kopieren von [PHP-Klassen und -Objekten], das einen gewissen Referenzwert hat. Jetzt kann ich es mit allen teilen, die es brauchen.
Objektkopie
Nutzungsszenarien:
1. Wenn Sie ein GTK-Fensterobjekt haben, enthält das Objekt fensterbezogene Ressourcen. Möglicherweise möchten Sie ein neues Fenster kopieren und alle Eigenschaften des ursprünglichen Fensters beibehalten, es muss jedoch ein neues Objekt sein (denn wenn es sich nicht um ein neues Objekt handelt, wirken sich Änderungen in einem Fenster auf das andere Fenster aus).
2. Wenn Objekt A einen Verweis auf Objekt B enthält und Sie möchten, dass das darin verwendete Objekt nicht mehr Objekt B, sondern eine Kopie von B ist, müssen Sie Objekt A erhalten eine Kopie von .
Implementierung: Über das Schlüsselwort clone (das nach Möglichkeit die Methode __clone() des Objekts aufruft) kann die Methode __clone() im Objekt nicht direkt aufgerufen werden.
$copy_of_object = clone $object;
Wenn ein Objekt kopiert wird, führt PHP 5 eine flache Kopie aller Eigenschaften des Objekts durch. Alle Referenzeigenschaften sind weiterhin Verweise auf die ursprünglichen Variablen.
void __clone ( void )
Wenn der Kopiervorgang abgeschlossen ist und die Methode __clone() definiert ist, wird die Methode __clone() im neu erstellten Objekt (dem durch das Kopieren generierten Objekt) aufgerufen und kann zum Ändern von Attributen verwendet werden . Wert (falls erforderlich).
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 ) ) */?>
Verwandte Empfehlungen:
[php-Klassen und -Objekte] magische Methode
[php-Klassen und -Objekte]-Traversal
[php-Klassen und -Objekte] überladen
Das obige ist der detaillierte Inhalt von[PHP-Klassen und -Objekte] Objektkopie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!