引用返回

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

当你想将函数的返回引用绑定到某个变量时,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;

一些简单的例子

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

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。

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

/*

** 值传递和引用传递,值传递传递的是值的一个复本,引用传递传递的是值指向的内存地址

*/

// 函数的引用,定义时也要加上 &

function &func($a,$b){

// 这里为了更直观看到效果,定义一个静态变量

static $result = 0;

$result+=$a+$b;

echo $result.'
';

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 '


';

// 这样才是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 function 返回值_PHP函数引用返回的实例详解相关推荐

  1. python脚本例子_python dict 字典 以及 赋值 引用的一些实例(详解)

    最近在做一个很大的数据库方面的东东,要用到根据数值来查找,于是想到了python中的字典,平时没用过dict这个东东 用的最多的还是 list 和 tuple (网上查 用法一大堆) 看了一下创建字典 ...

  2. mysql通过集合查询_MySQL使用集合函数进行查询操作实例详解

    本文实例讲述了MySQL使用集合函数进行查询操作.分享给大家供大家参考,具体如下: COUNT函数 SELECT COUNT(*) AS cust_num from customers; SELECT ...

  3. python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印

    python Format()函数的用法___实例详解(一)(全,例多) (格式化替换,关键字替换,列表字典替换,类格式化, 魔法函数格式化,对齐及填充格式化,format对齐打印) 本篇目录内容:

  4. Python中Print()函数的用法___实例详解(二)(全,例多)

    Python中Print()函数的用法___实例详解(二)(全,例多) 目录 十一.Print()小例子 十二.Print()中文输入显示乱码问题 十三.Print()写入文件 十四.print()在 ...

  5. python怎么调用函数的返回值_python函数的返回值是什么

    返回值简介 函数需要先定义后调用,函数体中 return 语句的结果就是返回值.如果一个函数没有 reutrn 语句,其实它有一个隐含的 return 语句,返回值是 None,类型也是 'NoneT ...

  6. C语言中的函数返回值、return用法、return 0详解

    1.函数返回值 定义:函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过return语句返回. 没有返回值的函数为空类型,用void表示.一旦函数的返回值类型被定义为 voi ...

  7. python的用途实例-Python基础之函数原理与应用实例详解

    本文实例讲述了Python基础之函数原理与应用.分享给大家供大家参考,具体如下: 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体 ...

  8. python中rstrip 函数,Python rstrip()方法实例详解

    Python 字符串 描述 Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格). 语法 rstrip()方法语法: str.rstrip([chars]) 参数 c ...

  9. sort函数怎么用mysql_实例详解sort()函数的原理和使用方法

    本文主要为大家分享一篇实例详解sort()函数的原理和使用方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,希望能帮助到大家. sort()方法就是对数组按照一定的条件进行排序. ...

最新文章

  1. 系分考试论文实例12篇
  2. c语言字符串英文,C语言字符串函数大全(国外英文资料).doc
  3. 299 Bulls and Cows 猜数字游戏
  4. mysql视图_MySQL视图详解
  5. 金融数据分析余挖掘实战1.9-1.10补充
  6. 所谓敏感(数字的敏感)
  7. 【分布计算环境学习笔记】2 分布式系统中的面向对象技术
  8. CSS 字体 font-family属性
  9. 基于SECS协议开发的简明教程(1)
  10. Spring MVC整合FreeMarker
  11. 熬夜淦了近 3W 字的 Docker 教程,从入门到精通(建议收藏)
  12. quartz 数据库表含义解释
  13. R语言中的缺失值处理
  14. 《用递归法解决问题》教学设计
  15. 菲尔兹奖-历届获得者
  16. 数据库--mysql(SQL语句)
  17. 无线串口服务器设置,怎么使用无线串口服务器
  18. 关于一次美团java程序员招聘面试的经历
  19. 第二季5:配置视频捕获模块(step3:VI模块)
  20. HttpSession的常见用法(javaWeb)

热门文章

  1. 数据库期末复习选择题整理
  2. Mac自带的Java设置JAVA_HOME
  3. 资产配置那些事-常用理财工具3
  4. 2 jmu-ds-二叉树实现表达式求解
  5. TextView文字图片混合显示并设置点击事件
  6. 计算机体系结构分类-Flynn分类法
  7. hdu5898(数位dp)
  8. mongo数据库用户创建及权限授予
  9. 李咏、朱军和董卿谁最应该下春晚
  10. PHP 解决时间戳冲突,php 时间超出2038年 转化时间戳失败的解决方案