加入收藏 | 设为首页 | 会员中心 | 我要投稿 张家口站长网 (https://www.0313zz.com.cn/)- 办公协同、操作系统、混合云网络、数据湖、视觉智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php函数引用返回的详解

发布时间:2022-07-29 11:10:47 所属栏目:PHP教程 来源:互联网
导读:函数引用与php中变量引用一样使用的是符号了,今天我们就一起来看看函数的引用返回的一些例子,希望这些例子能够对各位有帮助. 引用返回 手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪
  函数引用与php中变量引用一样使用的是&符号了,今天我们就一起来看看函数的引用返回的一些例子,希望这些例子能够对各位有帮助.
 
  引用返回
 
  手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用
 
  当你想将函数的返回引用绑定到某个变量时,PHP允许你这么做:
 
  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
  可见,想让函数返回引用,必须在函数申明和赋值时都带上&操作符.
 
  对于类中方法也是如此:
 
  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;
  一些简单的例子
 
  看下面的简单例子,尝试去理解引用返回.
 
  <?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
  尽管函数声明方式是 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。
 
  再来个程序例子加深理解:
 
  <?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);
  ?> 

(编辑:张家口站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读