Passe une variable par reference

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
Configuration: Windows Vista
Firefox 3.0.9

4 réponses

  1. 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.
    1. 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 ? ;)
      1. Gagné ^^. C'est assez utile de comprendre ce genre de "détails", ça s'applique aussi à d'autres langages que PHP.
    2. 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 &