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)
- Un nouvel objet ; par exemple foo(new foobar())
-
Une référence retournée par une fonction :
<?php function foo(&$var) { $var++; } function &bar() { $a = 5; return $a; } foo(bar()); ?>
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 foo($a = 5); // Expression, pas une variable foo(5); // Produit une erreur fatale ?>