Passer par référence
Vous pouvez passer une variable à une fonction par référence afin que la fonction puisse modifier la valeur de son paramètre. La syntaxe est la suivante :
<?php function foo(&$var) { $var++; } $a=5; foo($a); // $a is 6 here ?>
Notez qu'il n'y a pas de symboles de référence dans l'appel de fonction - uniquement dans la définition de la fonction. La définition de la fonction à elle seule suffit pour que les paramètres soient passés correctement par référence. Dans les versions récentes de PHP, si vous utilisez & in foo(&$a); vous recevrez un avertissement indiquant que "Call-time pass-by-reference" est obsolète.
Les éléments suivants peuvent être transmis par référence :
Variables, telles que foo($a)
Nouvelles instructions, telles que foo(new foobar())
Références renvoyées par fonctions , par exemple :
<?php function &bar() { $a = 5; return $a; } foo(bar()); ?>
Pour une explication détaillée, voir le retour de référence.
Toute autre expression ne peut pas être transmise par référence et le résultat n'est pas défini. Par exemple, l'exemple suivant de passage par référence n'est pas valide :
<?php function bar() // Note the missing & { $a = 5; return $a; } foo(bar()); // 自 PHP 5.0.5 起导致致命错误 foo($a = 5) // 表达式,不是变量 foo(5) // 导致致命错误 ?>
Ces conditions sont disponibles dans PHP 4.0.4 et versions ultérieures.
Retour de référence
Le retour de référence est utilisé lorsque vous souhaitez utiliser une fonction pour trouver à quelle variable la référence doit être liée. N'utilisez pas de références de retour pour augmenter les performances, le moteur est suffisamment intelligent pour l'optimiser lui-même. Ne renvoyez les références que s’il existe une raison technique valable ! Pour renvoyer une référence, utilisez cette syntaxe :
<?php class foo { public $value = 42; public function &getValue() { return $this->value; } } $obj = new foo; $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42. $obj->value = 2; echo $myValue; // prints the new value of $obj->value, i.e. 2. ?>
Dans cet exemple, les propriétés de l'objet renvoyées par la fonction getValue se verront attribuer des valeurs, non copiées, comme si la syntaxe de référence n'était pas utilisée.
Remarque : contrairement au passage de paramètres, l'esperluette doit être utilisée aux deux endroits ici - indiquant qu'une référence est renvoyée, et non la copie habituelle, et indiquant également que $myValue est lié comme référence, au lieu de l'habituel. affectation.
Remarque : Si vous essayez de renvoyer une référence à partir d'une fonction comme celle-ci : return ($this->value);, cela ne fonctionnera pas car vous essayez de renvoyer le résultat d'une expression plutôt qu'un variable référencée. Vous ne pouvez renvoyer que des variables de référence à partir de fonctions - il n'y a pas d'autre moyen. Si le code tente de renvoyer le résultat d'une expression dynamique ou de l'opérateur new, une erreur E_NOTICE est émise à partir de PHP 4.4.0 et PHP 5.1.0.
<?php function &test(){ static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } $a=test();//这条语句会输出$b的值为1 $a=5; $a=test();//这条语句会输出$b的值为2 $a=&test();//这条语句会输出$b的值为3 $a=5; $a=test();//这条语句会输出$b的值为6 ?>
L'appel d'une fonction à l'aide de $a=test() attribue uniquement la valeur de la fonction à $a, et toute modification apportée à $a n'affectera pas $b dans la fonction. $a=&test(), sa fonction est de pointer l'adresse mémoire de la variable $b en retour $b et l'adresse mémoire de la variable $a au même endroit, ce qui produit l'équivalent de cet effet ( $a=&b ;) Ainsi, changer la valeur de $a change également la valeur de $b, donc après avoir exécuté $a=&test(); $a=5;, la valeur de $b devient 5.
Paramètres de transmission PHP par utilisation de référence
<?php function add_some_extra(&$string) // 引入变量,使用同一个存储地址 { $string .= 'and something extra.'; } $str = 'This is a string, '; add_some_extra($str); echo $str; // outputs 'This is a string, and something extra.' ?>
Sortie :
This is a string, and something extra.
Sans l'esperluette
<?php function add_some_extra($string) { $string .= 'and something extra.'; } $str = 'This is a string, '; add_some_extra($str); echo $str; // outputs 'This is a string, ' ?>
Sortie :
This is a string,
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!