Heim >Backend-Entwicklung >PHP-Tutorial >PHP-objektorientierter Klon und Serialisierung
Es gibt drei Möglichkeiten zum Kopieren von
-Objekten:
1, direkt kopieren $a = $b
Dies ist eine flache Kopie, wenn $a geändert wird, ändert sich auch $b, da sie auf denselben Heap-Bereich verweisen
2, Kopie von $a klonen = $b klonen
Diese Art von Kopie scheint eine tiefe Kopie zu sein, wenn sich $a ändert, tut dies auch $b Nicht Es wird sich entsprechend ändern. PHP bietet die magische Methode __Clone(), um die Klonreplikation anzupassen und welche Änderungen während des Replikationsprozesses erforderlich sind . Definition.
Diese Kopiermethode weist jedoch einen Fehler auf. Es ist zu beachten, dass beim Klonen ein Attribut einer anderen Klasse verwendet wird Attribut tief kopiert werden durch Ist das nicht peinlich? Natürlich kann dieser Fehler durch die __clone()-Methode ausgeglichen werden nur eine neue neue Klasse .
class test{ private $name; private $sex; private $demo; public function __construct($name,$sex,$demo){ $this->name = $name; $this->sex = $sex; $this->demo = $demo; } public function __set($key,$value){ $this->{$key} = $value; } public function __get($key){ return $this->{$key}; } public function __clone(){ $this->name='null'; //这里可以自定义clone } }
class demo{ private $name; public function __construct($name='demo01'){ $this->name = $name; } public function __set($key,$value){ $this->{$key} = $value; } public function __get($key){ return $this->{$key}; } }
$t = new test('aa', 'bb',new demo('d01')); $d = clone $t; //$d->name='nihao'; $d->demo->name = 'd02'; var_dump($t); //结果 $t->demo->name d02Verwenden Sie Klonen zum Ausgleich
public function __clone(){ $this->name='null'; $this->demo = new demo('init'); }
3, serialisierte Kopie
Auf diese Weise können Sie eine tiefe Kopie des Referenztyps im Attribut realisieren, ohne die Clone-Magic-Methode zu verwenden.
$b = unserialize(serialize($t));Das Obige stellt den objektorientierten PHP-Klon und die Serialisierung vor, einschließlich inhaltlicher Aspekte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.