Passe une variable par reference

Fermé
nickleus Messages postés 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 - 24 avril 2009 à 19:06
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 - 25 avril 2009 à 17:12
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 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
24 avril 2009 à 21:50
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 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
24 avril 2009 à 22:40
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 374 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 18 juin 2011 5
25 avril 2009 à 09:03
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 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
25 avril 2009 à 17:12
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 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
25 avril 2009 à 09:38
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