Maison > Article > développement back-end > Comment appeler __clone() en PHP
Cet article présente principalement comment appeler __clone() en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Vous pouvez définir une méthode __clone() dans la classe d'objet pour ajuster le comportement de clonage de l'objet. Le code de cette méthode sera exécuté lors de l'opération de clonage. En plus de copier tous les membres d'objet existants vers l'objet cible, les opérations spécifiées par la méthode __clone() sont effectuées. Ensuite, modifiez la classe Corporate_Drone et ajoutez les méthodes suivantes :
function __clone() { $this->tiecolor = "blue"; }
Après cela, créez un nouvel objet Corporate_Drone, augmentez la valeur du membre Employeeid, clonez l'objet, puis produisez des données pour montrer que la tiecolor de l'objet cloné est bien définie via la méthode __clone(). Exemple de code :
<?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 />"; ?>
Résultat de l'exécution du programme
drone1 employeeID: 12345 drone2 employeeID: 67890 drone2 tiecolor:
Ce qui précède attribue simplement une classe à une autre classe, il y a donc encore un objet dans la mémoire à ce moment.
<?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(); ?>
La méthode clone clone une nouvelle classe, il y a donc deux objets dans la mémoire à ce moment.
La méthode __clone() de php fait une copie superficielle d'une instance d'objet. Les types numériques de base dans l'objet sont copiés par valeur, et les variables membres du type d'objet dans l'objet, si __clone n'est pas remplacé par la méthode, si vous clonez explicitement la variable membre de l'objet, la variable membre est copiée par référence au lieu de générer un nouvel objet. Comme le dit le commentaire à la ligne 28 de l'exemple ci-dessous
<?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); ?>
sortie :
Le code est le suivant :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) } }Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun. Recommandations associées :
Explication détaillée du principe de pagination PHP, du code de pagination, de la méthode de production de classe de pagination et des exemples
Étapes de vérification pour le développement de la version PHP de la plateforme publique WeChat Explication détaillée des exemples (à lire absolument)
Méthode php de suppression de répertoires de fichiers basée sur la récursivité
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!