Objets et r�f�rences

Un des piliers de la POO de PHP 5 est le fait que les "objets sont pass�s par r�f�rence par d�faut". Ce n'est pas compl�tement vrai. Cette section rectifie cette g�n�ralisation avec quelques exemples.

Une r�f�rence PHP est un alias, qui permet � deux variables diff�rentes de repr�senter la m�me valeur. Depuis PHP 5, une variable contenant un objet ne contient plus l'objet lui-m�me. Il contient un identifiant d'objet, ce qui permet aux accesseurs d'objets de trouver cet objet. Lorsque l'objet est utilis� comme argument, retourn� par une fonction ou assign� � une autre variable, les diff�rentes variables ne sont pas des alias : ils contiennent le m�me identifiant, qui pointe sur la m�me valeur.

Exemple #1 R�f�rences et Objets

<?php
class {
    public 
$foo 1;
}  

$a = new A;
$b $a;     // $a et $b sont des copies du m�me identifiant
             // ($a) = ($b) = <id>
$b->foo 2;
echo 
$a->foo."\n";


$c = new A;
$d = &$c;    // $c et $d sont des r�f�rences
             // ($c,$d) = <id>

$d->foo 2;
echo 
$c->foo."\n";


$e = new A;

function 
foo($obj) {
    
// ($obj) = ($e) = <id>
    
$obj->foo 2;
}

foo($e);
echo 
$e->foo."\n";

?>

L'exemple ci-dessus va afficher :

2
2
2