Passage par référence

Vous pouvez passer une variable par référence à une fonction, de manière à ce que celle-ci puisse la modifier. La syntaxe est la suivante :

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

Note: 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 en elle-même est suffisante pour passer correctement des arguments par référence. A partir de PHP 5.3.0, vous devriez recevoir une alerte disant que "Call-time pass-by-reference" est obsolète, lorsque vous utilisez un & dans foo(&$a);. Et à partir de PHP 5.4.0, call-time pass-by-reference a été supprimé, l'utiliser lèvera une erreur fatale.

Les données suivantes peuvent être passées par référence :

  • Une variable, comme dans foo($a)
  • Une référence retournée par une fonction :

    <?php
    function foo(&$var)
    {
        
    $var++;
    }
    function &
    bar()
    {
     
    $a 5;
     return 
    $a;
    }
    foo(bar());
    ?>
    Pour plus d'informations, voir les détails dans retour par référence.

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 :

<?php
function foo(&$var)
{
    
$var++;
}
function 
bar() // Notez l'absence de &
{
   
$a 5;
   return 
$a;
}
foo(bar());    // Produit une erreur fatale depuis PHP 5.0.5, une remarque
               //  strict standard depuis PHP 5.11 et juste une remarque depuis
               // PHP 7.0.0

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

class Foobar
{
}

foo(new Foobar()) // Produit un notice depuis PHP 7.0.7
                  // Notice: Seules les variables devraient être passées par référence.
?>