Passe une variable par reference

nickleus Messages postés 384 Statut Membre -  
pyschopathe Messages postés 2053 Statut Membre -
Bonjour,

je n'arrive pas à faire la différence entre :

$a = $b;

et

$a =& $b;

j'ai beau lire les infos sur php.net, mais ce n'est pas claire pour moi.

Pourriez-vous m'expliquer comment ça fonctionne ou me donner un exemple concret ?

Merci beaucoup d'avance
A voir également:

4 réponses

PhP Messages postés 1774 Statut Membre 606
 
Bsr

Normal car c'est loin d'être trivial.

Tout ceci est nettement mieux expliqué dans cet article (en anglais mais avec des schémas très détaillés)

https://derickrethans.nl/talks/phparch-php-variables-article.pdf

0
pyschopathe Messages postés 2053 Statut Membre 135
 
Les variables sont des noms permettant d'identifier des adresses en mémoire. Dans ces adresses, on stocke des données.

Par exemple :
$a = 2 -> On réserve une zone de mémoire et on dit que "$a" pointe dessus. Ensuite on place la valeur 2 dedans.
$b = 3 -> On réserve une zone de mémoire et on dit que "$b" pointe dessus. Ensuite on place la valeur 3 dedans.
La différence entre les deux notations vient du fait que dans un cas, on copie la valeur contenu dans la case mémoire, dans l'autre, on fait pointer la variable vers une autre case.

Exemple:
cas 1:
$a = $b -> $a = 3
La valeur contenue par la variable b est copiée dans la variable a.
cas 2:
$a =& $b -> $a = 3
La variable a référence la même adresse mémoire que la variable b.
$b = 5 -> $a = 5
On modifie la valeur référencée par b, donc la valeur référencée par a puisque les deux noms pointe sur le même emplacement mémoire.

J'espère avoir éclairci un peu ta lanterne, sinon n'hésite pas à demander des précisions.
0
nickleus Messages postés 384 Statut Membre 5
 
Merci de votre aide. J'espère avoir compris. Donc cela voudrait-il dire que si :

$b = 1;
$a =& $b;

donc si le modifie la valeur de $a par 2 (par exemple), alors

$b == 2;

Est-ce que c'est ça ou alors j'ai rien compris ? ;)
0
pyschopathe Messages postés 2053 Statut Membre 135
 
Gagné ^^. C'est assez utile de comprendre ce genre de "détails", ça s'applique aussi à d'autres langages que PHP.
0
PhP Messages postés 1774 Statut Membre 606
 
Bjr

Oui c'est ça ;-)

En général les références sont utilisées avec les fonctions pour passer un paramètre qu'on veut modifier dans la fonction ou pour retourner une référence.

function addition($param)
{
$param+=100;
}

$a=10;
addition($a);
echo $a; // Affiche 10

function addition_par_reference(&$param)
{
$param+=100;
}

$a=10;
addition_par_reference($a);
echo $a; // Affiche 110

Quand aux objets depuis PHP 5 ils sont systématiquement passés par référence même sans l'utilisation du signe &
0