Wir wussten bereits, dass beim Aufrufen eines Objekts mithilfe einer Pass-by-Referenz der tatsächliche Aufruf dasselbe Objekt ist. Manchmal ist es erforderlich, eine Kopie des Objekts zu erstellen, wenn wir das ursprüngliche Objekt ändern Um die Kopie zu beeinflussen, können Sie das aktuelle Objekt verwenden, um ein identisches Objekt zu klonen. Die geklonte Kopie ist völlig unabhängig von den beiden Originalobjekten und stört sich nicht.
Nehmen wir ein einfaches Beispiel, um zu sehen, wie das Klonen verwendet wird:
<?php header("content-type:text/html;charset=utf-8"); class Character{ //定义一个角色类 public $name; protected $location; function __construct($name , $location) //创建构造函数 { $this->name = $name; $this->location = $location; } function play(){ //创建方法 echo '我要玩' . $this->name.$this->location; } } $character1 = new Character('亚索','中单'); //实例化一个类 $character2 = clone $character1; //将实例化的类再克隆出来一个 $character1->play(); //调用方法执行 echo '<br/>'; $character2->play();
Die Ergebnisse der obigen Beispiele sind alle „Ich möchte Yasuo Mid Laner spielen“.
Wir haben oben gesagt, dass die geklonte Kopie unabhängig vom Original ist und sich nicht gegenseitig stört. Was bedeutet das?
Es ist immer noch das gleiche Beispiel wie oben, mit nur ein paar Änderungen.
<?php header("content-type:text/html;charset=utf-8"); class Character{ //定义一个角色类 public $name; public $location; function __construct($name , $location) //创建构造函数 { $this->name = $name; $this->location = $location; } function play(){ //创建方法 echo '我要玩' . $this->name.$this->location; } } $character1 = new Character('亚索','中单'); //实例化一个类 $character2 = clone $character1; $character2->location = '上单'; $character1->play(); //调用方法执行 echo '<br/>'; $character2->play();
Die Ergebnisse des obigen Beispiels sind „Ich möchte Yasuo auf der mittleren Lane spielen“ und „Ich möchte Yasuo auf der oberen Lane spielen“.
Wie aus dem Beispiel ersichtlich ist, sind die geklonte Kopie und die beiden ursprünglichen Objekte völlig unabhängig und stören sich nicht gegenseitig.
Verwendung von __clone
Oft möchten wir nicht nur ein Objekt klonen, sondern auch, dass das Objekt über eigene Eigenschaften und Methoden verfügt. Dann müssen wir eine __clone-Methode in der Klasse erstellen. Diese Methode ähnelt dem Konstruktor und Destruktor darin, dass sie nicht direkt aufgerufen wird.
Nehmen wir das obige Beispiel als Beispiel:
<?php header("content-type:text/html;charset=utf-8"); class Character{ //定义一个角色类 public $name; public $location; function __construct($name , $location) //创建构造函数 { $this->name = $name; $this->location = $location; } function __clone(){ $this -> location = '上单'; } function play(){ //创建方法 echo '我要玩' . $this->name.$this->location; } } $character1 = new Character('亚索','中单'); //实例化一个类 $character2 = clone $character1; $character1->play(); //调用方法执行 echo '<br/>'; $character2->play();
Eine gute Funktion der __clone-Methode ist, dass sie nach dem Erstellen einer Kopie mit dem Standardverhalten aufgerufen werden kann, so dass hier Stufe: Sie können nur das ändern, was Sie ändern möchten.
Die häufigste der __clone-Methode hinzugefügte Funktionalität besteht darin, sicherzustellen, dass Klasseneigenschaften, die als Referenzen behandelt werden, korrekt kopiert werden. Wenn Sie eine Klasse klonen möchten, die einen Verweis auf ein Objekt enthält, benötigen Sie möglicherweise eine zweite Kopie des Objekts und keinen zweiten Verweis auf das Objekt. Deshalb fügen Sie diesen Code in der Methode __clone hinzu.
Das obige ist der detaillierte Inhalt vonPHP-Methode zum objektorientierten Objektklonen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!