Heim >Backend-Entwicklung >PHP-Tutorial >So rufen Sie __clone() in PHP auf
Dieser Artikel stellt hauptsächlich vor, wie man __clone() in PHP aufruft. Ich hoffe, dass er für alle hilfreich ist.
Sie können eine __clone()-Methode in der Objektklasse definieren, um das Klonverhalten des Objekts anzupassen. Der Code für diese Methode wird während des Klonvorgangs ausgeführt. Zusätzlich zum Kopieren aller vorhandenen Objektmitglieder in das Zielobjekt werden die von der Methode __clone() angegebenen Vorgänge ausgeführt. Ändern Sie als Nächstes die Corporate_Drone-Klasse und fügen Sie die folgende Methode hinzu:
function __clone() { $this->tiecolor = "blue"; }
Erstellen Sie anschließend ein neues Corporate_Drone-Objekt, erhöhen Sie den Wert des EmployeeID-Mitglieds, klonen Sie dieses Objekt und geben Sie dann einige Daten aus, um die Krawattenfarbe anzuzeigen des geklonten Objekts wird tatsächlich übergeben_ Von der Methode _clone() festgelegt. Beispielcode:
<?php // Create new corporatedrone object $drone1 = new corporatedrone(); // Set the $drone1 employeeid member $drone1->setEmployeeID("12345"); // Clone the $drone1 object $drone2 = clone $drone1; // Set the $drone2 employeeid member $drone2->setEmployeeID("67890"); // Output the $drone1 and $drone2 employeeid members echo "drone1 employeeID: ".$drone1->getEmployeeID()."<br />"; echo "drone2 employeeID: ".$drone2->getEmployeeID()."<br />"; echo "drone2 tiecolor: ".$drone2->getTiecolor()."<br />"; ?>
Ergebnis der Programmausführung
drone1 employeeID: 12345 drone2 employeeID: 67890 drone2 tiecolor:
Das Obige weist nur eine Klasse einer anderen Klasse zu, sodass sich zu diesem Zeitpunkt noch ein Objekt im Speicher befindet.
<?php class Fruit { private $name = "水果"; private $color = "颜色"; public function setName($name){ $this->name = $name; } public function setColor($color){ $this->color = $color; } function showColor(){ return $this->color.'的'.$this->name."<br />"; } function __destruct(){ echo "被吃掉了(对象被回收) <br />"; } function __clone(){ $this->name = "克隆水果"; } } $apple = new Fruit(); $apple->setName("大苹果"); $apple->setColor("红色"); echo $apple->showColor(); $clone_apple = clone $apple; $clone_apple->setColor("青色"); echo $clone_apple->showColor(); ?>
Die Klonmethode klont eine neue Klasse, sodass sich zu diesem Zeitpunkt zwei Objekte im Speicher befinden.
Die __clone()-Methode von PHP erstellt eine flache Kopie einer Objektinstanz. Die grundlegenden numerischen Typen im Objekt werden nach Wert kopiert, und die Objekttyp-Mitgliedsvariablen im Objekt werden, wenn __clone nicht überschrieben wird, verwendet. Wenn Sie die Objekt-Member-Variable explizit klonen, wird die Member-Variable per Referenz kopiert, anstatt ein neues Objekt zu generieren. Wie der Kommentar in Zeile 28 des Beispiels unten sagt:
<?php class Account { public $balance; public function __construct($balance) { $this->balance = $balance; } } class Person { private $id; private $name; private $age; public $account; public function __construct($name, $age, Account $account) { $this->name = $name; $this->age = $age; $this->account = $account; } public function setId($id) { $this->id = $id; } public function __clone() { #复制方法,可在里面定义再clone是进行的操作 $this->id = 0; $this->account = clone $this->account; #不加这一句,account在clone是会只被复制引用,其中一个account的balance被修改另一个也同样会被修改 } } $person = new Person("peter", 15, new Account(1000)); $person->setId(1); $person2 = clone $person; $person2->account->balance = 250; var_dump($person, $person2); ?>
Ausgabe:
The Der Code lautet wie folgt:
object(Person)#1 (4) { ["id":"Person":private]=> int(1) ["name":"Person":private]=> string(5) "peter" ["age":"Person":private]=> int(15) ["account"]=> object(Account)#2 (1) { ["balance"]=> int(1000) } } object(Person)#3 (4) { ["id":"Person":private]=> int(0) ["name":"Person":private]=> string(5) "peter" ["age":"Person":private]=> int(15) ["account"]=> object(Account)#4 (1) { ["balance"]=> int(250) } }
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Lernen aller hilfreich sein wird.
Verwandte Empfehlungen:
php-Methode zum Löschen von Dateiverzeichnissen basierend auf Rekursion
Das obige ist der detaillierte Inhalt vonSo rufen Sie __clone() in PHP auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!