Passage par r�f�rence

Vous pouvez passer des variables par r�f�rence, de mani�re � ce que la fonction modifie ces variables. La syntaxe est la suivante :

Exemple #1 Passage par r�f�rence

<?php
function foo(&$var) {
  
$var++;
}
$a=5;
foo ($a);
// $a vaut 6 maintenant
?>

Notez qu'il n'y a pas de signe de r�f�rence dans l'appel de la fonction, uniquement sur sa d�finition. La d�finition de la fonction est suffisante pour passer correctement des arguments par r�f�rence. Dans les versions r�centes de PHP, vous devriez recevoir une alerte disant que "Call-time pass-by-reference" est obsol�te lorsque vous utilisez un & dans foo(&$a);.

Les objets suivants peuvent �tre pass�s par r�f�rence :

  • Une variable, i.e. foo($a)
  • Un nouvel objet, i.e. foo(new foobar())
  • Une r�f�rence, retourn�e par une fonction :

    Exemple #2 Retour d'une r�f�rence par une fonction

    <?php
    function &bar() {
     
    $a 5;
     return 
    $a;
    }
    foo(bar());
    ?>

    Voir aussi des d�tails dans retourner des r�f�rences.

Toutes les autres expressions ne doivent pas �tre pass�es par r�f�rence, car le r�sultat sera ind�fini. Par exemple, les passages par r�f�rence suivants sont invalides :

Exemple #3 Passage par r�f�rence invalide

<?php
function bar() // Notez l'absence de &
{
   
$a 5;
   return 
$a;
}
foo(bar());    // Produit une erreur fatale depuis PHP 5.0.5

foo($a 5);    // Expression, pas une variable
foo(5);         // Produit une erreur fatale
?>

Ces fonctionnalit�s sont valables � partir de PHP 4.0.4.