http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/10/2173092.html

函数的引用返回

先看代码

  1. <?php
  2. function &test()
  3. {
  4. static $b=0;//申明一个静态变量
  5. $b=$b+1;
  6. echo $b;
  7. return $b;
  8. }
  9. $a=test();//这条语句会输出 $b的值 为1
  10. $a=5;
  11. $a=test();//这条语句会输出 $b的值 为2
  12. $a=&test();//这条语句会输出 $b的值 为3
  13. $a=5;
  14. $a=test();//这条语句会输出 $b的值 为6
  15. ?>

下面解释下: 
通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数调用没有区别 至于原因: 这是PHP的规定
PHP规定通过$a=&test(); 方式得到的才是函数的引用返回
至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。) 这句狗屁话 害我半天没看懂

用上面的例子来解释就是
$a=test()方式调用函数,只是将函数的值赋给$a而已, 而$a做任何改变 都不会影响到函数中的$b
而通过$a=&test()方式调用函数呢, 他的作用是 将return $b中的 $b变量的内存地址与$a变量的内存地址 指向了同一个地方
即产生了相当于这样的效果($a=&$b;) 所以改变$a的值 也同时改变了$b的值 所以在执行了
$a=&test();
$a=5;
以后,$b的值变为了5

这里是为了让大家理解函数的引用返回才使用静态变量的,其实函数的引用返回多用在对象中

另附一个php官方例子:

    1. This is the way how we use pointer to access variable inside the class.
    2. <?php
    3. class talker{
    4. private $data = 'Hi';
    5. public function & get(){
    6. return $this->data;
    7. }
    8. public function out(){
    9. echo $this->data;
    10. }
    11. }
    12. $aa = new talker();
    13. $d = &$aa->get();
    14. $aa->out();
    15. $d = 'How';
    16. $aa->out();
    17. $d = 'Are';
    18. $aa->out();
    19. $d = 'You';
    20. $aa->out();
    21. ?>
    22. the output is "HiHowAreYou"

最新文章

  1. 串口实现FIFO接受数据
  2. JS定义函数的两种方式:函数声明和函数表达式
  3. 生产uuid
  4. Redis主从复制问题和扩容问题的解决思路
  5. Nginx学习笔记(七) 创建子进程
  6. 2.1.12 Next Permutation 下一个字典序数组
  7. http://my.oschina.net/chinacion/blog/647641
  8. AbsListView.OnScrollListener
  9. java指令集
  10. codeforces #313 div1 A
  11. 左移运算符&lt;&lt;
  12. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有
  13. leetcode1035
  14. 2、Kafka架构
  15. Mysql双主热备+LVS+Keepalived高可用操作记录
  16. Ubuntu 下 Sublime 无法输入中文?(已解决)
  17. Centos6.5+Redmine
  18. 如何修改隐藏Zblog/WordPress默认后台登录地址
  19. resttemplate 文件上传 上传文件
  20. 【D】分布式系统的CAP理论

热门文章

  1. unity之Mathf类
  2. arugsJS 入门
  3. c++ 参赛设置
  4. libui-node体验笔记
  5. UVa 10450 - World Cup Noise
  6. JBOSS-EAP-6.2集群部署
  7. 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计
  8. asp.net返回值当文件下载问题
  9. css揭秘读书笔记
  10. Android 中如何从一个App启动另外一个App(如启动支付界面、启动地图界面、应用商场下载App等场景)