PHP函数引用返回的实例详解

5年以前  |  阅读数:822 次  |  编程语言: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);
    ?>

总结

关于php函数引用返回的内容到这就基本结束了,希望对大家学习或使用PHP函数能有所帮助,如果有疑问大家可以留言交流。谢谢大家对脚本之家的支持。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例