Heim  >  Artikel  >  Backend-Entwicklung  >  So rufen Sie __clone() in PHP auf

So rufen Sie __clone() in PHP auf

墨辰丷
墨辰丷Original
2018-06-05 17:42:011500Durchsuche

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.&#39;的&#39;.$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:

Detaillierte Erläuterung des PHP-Paging-Prinzips, des Paging-Codes, der Produktionsmethode für Paging-Klassen und Beispiele

Überprüfungsschritte für Entwicklung der PHP-Version der öffentlichen WeChat-Plattform Detaillierte Erläuterung der Beispiele (muss gelesen werden)

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!

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