Maison >développement back-end >tutoriel php >Que renvoie la référence de fonction personnalisée PHP ? Explication détaillée de l'instance de retour de référence

Que renvoie la référence de fonction personnalisée PHP ? Explication détaillée de l'instance de retour de référence

伊谢尔伦
伊谢尔伦original
2017-06-27 09:20:231204parcourir

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.&#39;<br />&#39;;
 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 &#39;<hr />&#39;;
// 这样才是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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn