RéférenceRetour
Le manuel dit ceci : Le retour de référence est utilisé lorsque vous souhaitez utiliser une fonction pour trouver celle à laquelle la référence doit être liée Lorsque la variable est au dessus. 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
Lorsque vous souhaitez lier la référence de retour d'une fonction à une variable, PHP vous permet de faire ceci :
function &returns_reference() { static $someref = 0; $someref++; return $someref; } $newref = &returns_reference();//引用返回,相当于 $newref = &$someref; echo $newref; //1 //phpfensi.com $notref = returns_reference(); //值传递的是副本 $newref = 100; echo $notref; //2 $newref = 100; echo returns_reference(); //101
Visible, si vous souhaitez que la fonction renvoie une référence, vous devez L'&opérateur est utilisé lors de la déclaration et de l'attribution de fonctions.
Il en va de même pour les méthodes dans les classes :
class foo { public $value = 0; 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;
Quelques exemples simples
Regardez les exemples simples ci-dessous et essayez de comprendre le retour de référence.
<?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 ?> //程序运行结果: 1 2 3 6
Bien que la déclaration de fonction est function &test()
comme ça, ce que nous obtenons de l'appel de fonction $a = test()
de cette manière n'est pas réellement un retour de référence de fonction, ce qui n'est pas différent d'un appel de fonction ordinaire. PHP stipule que ce qui est obtenu via $a = &test() est le retour de référence de la fonction.
En utilisant l'exemple ci-dessus pour expliquer, $a = test()
Appeler une fonction de cette manière attribue uniquement la valeur de la fonction à $a, et toute modification apportée à $a n'affectera pas $b dans la fonction.
Quant à l'appel d'une fonction via la méthode $a = &test()
, sa fonction est de pointer l'adresse mémoire de la variable $b dans return $b
au même endroit que l'adresse mémoire de la variable $a. C'est-à-dire que l'effet équivalent à celui-ci est produit ($a=&$b
), donc changer la valeur de $a change également la valeur de $b.
Ainsi, après avoir exécuté
$a = &test(); $a = 5;
, la valeur de $b devient 5.
Un autre exemple de programme pour approfondir la compréhension :
<?php /* ** 值传递和引用传递,值传递传递的是值的一个复本,引用传递传递的是值指向的内存地址 */ // 函数的引用,定义时也要加上 & function &func($a,$b){ // 这里为了更直观看到效果,定义一个静态变量 static $result = 0; $result+=$a+$b; echo $result.'<br />'; return $result; } $a = $b = 10; // PHP里这样写函数的引用调用,和调用普通函数没有区别(只是将函数的返回值复制给$c这个变量,$c做任何改变不会影响上面函数中的$result) // 要记住:PHP里的函数引用定义及调用都要在函数名前加上 & $c = func($a,$b); // 第一次执行func(),其静态变量$result的值变为 20(10+10) // 改变$c的值,不会对下面一行语句产生影响 $c = 666; // 第二次执行func(),其静态变量$result的值变为 40(20+10+10) $c = func($a,$b); echo '<hr />'; // 这样才是PHP中引用函数的调用方式 $d = &func($a,$b); // 第三次执行func(),其静态变量$result的值变为 40(40+10+10) $d = 888; // 第四次执行func(),其静态变量$result的值变为 908(888+10+10) $d = func($a,$b); ?>
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!