Heim >Backend-Entwicklung >PHP-Tutorial >PHP-objektorientierter Klon und Serialisierung

PHP-objektorientierter Klon und Serialisierung

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-08-08 09:22:481042Durchsuche

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   d02
Verwenden 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.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn