找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1653|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2588

主题

2588

帖子

7694

积分

论坛元老

Rank: 8Rank: 8

积分
7694
跳转到指定楼层
楼主
发表于 2018-2-14 05:33:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            引用返回
手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用
当你想将函数的返回引用绑定到某个变量时,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;
一些简单的例子
看下面的简单例子,尝试去理解引用返回.
//程序运行结果:
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中引用函数的调用方式
$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自定义函数返回多个值
  • PHP中函数内引用全局变量的方法
  • php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
  • php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
  • php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
  • 浅析PHP递归函数返回值使用方法
  • php函数间的参数传递(值传递/引用传递)
  • php返回json数据函数实例
  • php json_encode()函数返回json数据实例代码
  • php函数传值的引用传递注意事项分析
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端