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
- ?>