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

PHP-objektorientierter Klon und Serialisierung

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-08 09:22:48
Original
1060 Leute haben es durchsucht

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
		}
	}
Nach dem Login kopieren
	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};
		}
	}
Nach dem Login kopieren
	$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
Nach dem Login kopieren
Verwenden Sie Klonen zum Ausgleich

		public function __clone(){
			$this->name='null';
			$this->demo = new demo('init');
		}
Nach dem Login kopieren

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));
Nach dem Login kopieren
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.

Verwandte Etiketten:
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage