Clonage d’objet en PHP

Les objets sont inconstants, ce qui signifie que l’objet a la capacité de changer l’état de l’information. Dans la programmation PHP orientée objet POO, il peut arriver que vous ayez besoin de copies des objets. Nous pouvons créer une copie d’un objet en utilisant l’opérateur « = », pourquoi utiliser le clonage d’objet? Voici un exemple qui montre comment l’opérateur ‘=’ fonctionne pour créer des copies d’un objet:
 
 
Commençons par créer une classe Personne simple.

<?php 
class Personne{
	 private $cni;
	 private $nom;
	 private $age;
	 
	 public function __construct($cni,$nom,$age){
		 $this->cni = $cni;
		 $this->nom = $nom;
		$this->age = $age;
	 }
	 
	 public function __destruct(){
		 echo sprintf("Personne avec le CNI: %s est détruit.
		",
		 $this->cni);
	 }
	 
	 public function __toString(){
		 return sprintf("CNI: %s, Nom: %s, Age: %s,
		",
		 $this->cni,
		 $this->nom,
		 $this->age);
	 }
}
?>

Maintenant, nous pouvons créer des objets Personne:

<?php 
$personne1 = new Personne('121000992', 'Jean', '25');
echo $personne1;
 
$personne2 = new Personne('365000892','Yohan','22');
echo $personne2;
?>

Nous avons créé deux objets: $personne1 et $personne2. $personne1 et $personne2 sont des références qui pointent vers différents objets « Personne ».
 


 
 
Que se passera-t-il si nous faisons comme ça:

$personne2 = $personne1

$personne1 et $personne2 référençant le même objet. Pourtant, le destructeur de $personne2 est appelé car l’objet indiqué par $personne2 n’est plus utilisé.
 


 
Comme nous l’avons vu, aucun objet réel n’a été créé lorsque nous avons affecté $personne1 à $personne2, seule la référence a été modifiée. La manière dont nous avons copié l’objet est appelée copie superficielle.

Pour effectuer une copie en profondeur entraînant la création d’un nouvel objet, nous utilisons l’opérateur clone comme suit:

$personne2 = clone $personne1;

Lorsque nous exécutons l’instruction ci-dessus, la référence $personne2 pointe vers le nouvel objet créé. En plus, lors de l’exécution, la méthode magique __clone() est invoquée automatiquement.

Nous pouvons ajouter la méthode magique __clone() à la classe Personne pour voir comment cela fonctionne.

<?php 
	public function __clone(){
		echo 'Copie un Objet <br>';
	}
?>
QCM sur PHP

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *