php函数引用返回的详解

    xiaoxiao2022-06-30  76

    函数引用与php中变量引用一样使用的是&符号了,今天我们就一起来看看函数的引用返回的一些例子,希望这些例子能够对各位有帮助.

    引用返回

    手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用

    当你想将函数的返回引用绑定到某个变量时,PHP允许你这么做:

    01 function &returns_reference() 02 { 03     static $someref = 0; 04     $someref++; 05     return $someref; 06 } 07    08 $newref = &returns_reference();//引用返回,相当于 $newref = &$someref; 09 echo $newref; //1 10 //phpfensi.com 11 $notref = returns_reference(); //值传递的是副本 12 $newref = 100; 13 echo $notref; //2 14    15 $newref = 100; 16 echo returns_reference(); //101

    可见,想让函数返回引用,必须在函数申明和赋值时都带上&操作符.

    对于类中方法也是如此:

    01 class foo { 02     public $value = 0; 03    04     public function &getValue() { 05         return $this->value; 06     } 07 } 08    09 $obj = new foo; 10 $myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42. 11 $obj->value = 2; 12 echo $myValue;

    一些简单的例子

    看下面的简单例子,尝试去理解引用返回.

    01 <?php 02 function &test() 03 { 04  // 声明一个静态变量 05     static $b = 0; 06     $b = $b+1; 07     echo $b; 08     return $b; 09 } 10 $a = test(); //这条语句会输出 $b 的值为 1 11 $a = 5; 12 $a = test(); //这条语句会输出 $b 的值为2 13 $a = &test(); //这条语句会输出 $b 的值为3 14 $a = 5; 15 $a = test(); //这条语句会输出 $b的值 为6 16 ?> 17 //程序运行结果: 18 1 19 2 20 3 21 6

    尽管函数声明方式是 function &test() 这样,但我们通过这种方式 $a = test() 的函数调用得到的其实不是函数的引用返回,这跟普通的函数调用没有区别。PHP 规定通过 $a = &test() 这种方式得到的才是函数的引用返回。

    用上面的例子来解释就是,$a = test() 这种方式调用函数,只是将函数的值赋给 $a 而已,而$a做任何改变都不会影响到函数中的$b。

    而通过 $a = &test() 方式调用函数呢,它的作用是将 return $b 中的 $b 变量的内存地址与 $a 变量的内存地址指向了同一个地方。即产生了相当于这样的效果 ($a=&$b), 所以改变 $a 的值也同时改变了 $b 的值。所以在执行了

    $a = &test();

    $a = 5;

    以后,$b的值变为了5。

    再来个程序例子加深理解:

    01 <?php 02 /* 03 ** 值传递和引用传递,值传递传递的是值的一个复本,引用传递传递的是值指向的内存地址 04 */ 05 // 函数的引用,定义时也要加上 & 06 function &func($a,$b){   07  // 这里为了更直观看到效果,定义一个静态变量 08  static $result = 0;    09  $result+=$a+$b; 10  echo $result.'<br />'; 11  return $result; 12 } 13    14 $a = $b = 10; 15 // PHP里这样写函数的引用调用,和调用普通函数没有区别(只是将函数的返回值复制给$c这个变量,$c做任何改变不会影响上面函数中的$result) 16 // 要记住:PHP里的函数引用定义及调用都要在函数名前加上 & 17 $c = func($a,$b);  18 // 第一次执行func(),其静态变量$result的值变为 20(10+10) 19 // 改变$c的值,不会对下面一行语句产生影响 20 $c = 666;   21 // 第二次执行func(),其静态变量$result的值变为 40(20+10+10) 22 $c = func($a,$b); 23 echo '<hr />'; 24 // 这样才是PHP中引用函数的调用方式 25 $d = &func($a,$b);   26 // 第三次执行func(),其静态变量$result的值变为 40(40+10+10) 27 $d = 888; 28 // 第四次执行func(),其静态变量$result的值变为 908(888+10+10) 29 $d = func($a,$b);

    30 ?>

    转自:http://www.php-z.com/article-3402-1.html

    转载请注明原文地址: https://ju.6miu.com/read-1125796.html

    最新回复(0)