POO, clonage et référence
Il ne faut pas confondre le clonage et une référence. Le clonage est une copie conforme d’un objet tandis qu’une référence est une copie de l’identifiant d’un objet (son pointeur).
Cloner un objet
Il est possible de cloner un objet avec la syntaxe clone. Le clonage consiste à créer un autre objet identique à partir d’un objet existant. Même si les clones sont identiques, ce ne sont pas les mêmes. Si vous modifiez la valeur d’une propriété d’un objet cloné, la valeur de propriété du clone ne sera pas modifiée, et inversement.
class Bouteille{
public $marque = "coca-cola";
protected $volume = "1.5L";
public function info(){
echo $this->marque;
}
}
$unebouteille1 = new Bouteille();
$unebouteille2 = clone $unebouteille1; // clonage de l'objet
$unebouteille1->marque = "orangina"; // changement de marque sur l'objet cloné
$unebouteille1->info(); // information sur l'objet cloné
echo "<br>";
$unebouteille2->info(); // information dur le clone
Affichage
orangina
coca-cola
Référence
Avec les objets vous n’avez par besoin de créer une référence (avec l’ésperluette =&) pour pointer le même identifiant d’objet. Le simple opérateur d’affection (=) suffit. La variable affectée ne contient pas l’objet mais la copie de l’identifiant d’objet.
class A{
public $nb = 1;
}
$objA = new A();
function modif($obj){ // ici $obj et $objA sont des copies du même identifiant
$obj->nb=2;
}
modif($objA);
echo $objA->nb;
Affichage
2