• php引用(&)详解及注意事项——引用返回function &a();&a()


    php引用(&)详解及注意事项——引用返回function &a();&a()

    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.   
    10. $a=test();//这条语句会输出 $b的值 为1  
    11. $a=5;  
    12. $a=test();//这条语句会输出 $b的值 为2  
    13.   
    14. $a=&test();//这条语句会输出 $b的值 为3  
    15. $a=5;  
    16. $a=test();//这条语句会输出 $b的值 为6  
    17. ?>  

    下面解释下: 
    通过这种方式$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.   
      3. <?php  
      4. class talker{  
      5.   
      6.     private $data = 'Hi';  
      7.   
      8.     public function & get(){  
      9.         return $this->data;  
      10.     }  
      11.      
      12.     public function out(){  
      13.         echo $this->data;  
      14.     }     
      15.   
      16. }  
      17.   
      18. $aa = new talker();  
      19. $d = &$aa->get();  
      20.   
      21. $aa->out();  
      22. $d = 'How';  
      23. $aa->out();  
      24. $d = 'Are';  
      25. $aa->out();  
      26. $d = 'You';  
      27. $aa->out();  
      28. ?>  
      29.   
      30. the output is "HiHowAreYou" 
  • 相关阅读:
    表模块模式与事务脚本模式的代码编写
    解决方案下显示的网站名称被追加编号的问题解决方法
    应用层代码
    关于CodeReview(java)(转)
    关于事务的几个概念介绍(转)
    关于JVM的ClassLoader(转)
    svn相关
    .subversion
    linux用户与组的管理(命令加入、手动加入、加入组、用户之间的切换)
    回调函数
  • 原文地址:https://www.cnblogs.com/shsgl/p/5707332.html
Copyright © 2020-2023  润新知