zoukankan      html  css  js  c++  java
  • php function 定义时函数名前加&符号的意义

    问题:php在声明函数时,函数名前面的&符号有什么用?

    一直想不通.很多帖子说类似于变量的$a=&$b,但是$b在声明的时候前面可没有加&符号啊?那么这个函数名前面加&有什么用呢?

    很多人看的都是网上的例子,先用网上例子试一下:

    function &test(){
        static $b = 0;  //声明一个静态变量
        $b = $b+1;
        return $b;
        }
       $a = test();   //输出 $b 的值为:1
       $a = 5;
       $a = test();     //输出 $b 的值为:2
       
       $a = &test();  //输出 $b 的值为:3  
       $a = 5;           //$b的值变为了5
       $a = test();    //输出 $b 的值为:6  
    这看不出什么,$a是函数test的引用吗?那么继续
    function &test(){
        static $b = 0;  //声明一个静态变量
        $b = $b+1;
        return $b;
        }
       $a = test();   //输出 $b 的值为:1
       $a = 5;
       $a = test();     //输出 $b 的值为:2
       
       $a = &test();  //输出 $b 的值为:3  
       echo $a;       //输出$b 的值还是3  


    也就是说,如果$a是test函数的引用,那么echo $a的话会再次调用函数,那么$b的值会再次加1才对

    但是$a的值没有变,也就是说,$a保存的是test函数返回值的引用,即$b的引用.所以说相当于$a=&$b.

    也正因为如此,如果要实现对函数结果的引用:

    1.在赋引用的时候,test前要加&

    2.在声明的时候函数名前要加&,表示可以返回函数执行结果的一个引用

    3.同时函数必须有返回值,废话,没返回值那引用谁?

    举个没有歧义的例子:

    function &abc($n){

      $arr=array('aaa','bbb','ccc');

      return $arr[$n];  //将数组的第二个元素返回 

    }

    $tem=&abc(1); //这里只能得到数组的第二个元素的引用,因为只返回了第二个元素

    $tem='ddd';  //这里将数组的第二个元素的值改变成了'ddd'

    是不是更好理解?


    这个特点一般用来返回一些比较占空间的值,比如大的字符串等,但由于php的写时复制特点,这个技巧一般用的不多,

    但是当你需要对函数运算结果进行即时修改的话,那就可以用这个技巧了.

    php函数前面加&符号的意思是函数的引用返回,php函数前面加&符号有什么作用呢  

    Php代码   收藏代码
    1. function &test()  
    2. {  
    3. static $b=0;//申明一个静态变量  
    4. $b=$b+1;  
    5. echo $b;  
    6. return $b;  
    7. }  
    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  

    下面解释下: 
    通过这种方式$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函数前面加&符号是什么意思?有的函数前面会加&,因为很少见到,所以不明白php函数前面加&符号是什么意思

    那么,php函数前面加&符号有什么作用呢

    Java代码   收藏代码
    1. function &test()  
    2. {  
    3. static $b=0;//申明一个静态变量  
    4. $b=$b+1;  
    5. echo $b;  
    6. return $b;  
    7. }  
    8.   
    9. $a=&test();//这条语句会输出 $b的值 为1  
    10. $a=6;  
    11. test();//这条语句会输出$b的值 为7  

    php变量前面加&符号是什么意思

    先看一个示例 

    Php代码   收藏代码
    1. $foo = 321;  
    2. $bar = &$foo;   
    3. $bar = 123;  
    4. print $foo;  

    那么输出的结果将会是什么呢

    Php代码   收藏代码
    1. 123    

     

    为什么会这样呢?

    改动新的变量将影响到原始变量,这种赋值操作更加快速

    注意:只有命名变量才可以传地址赋值

    就是说,改变了$bar的值,也就改变了$foo的值了


    https://justcoding.iteye.com/blog/652937
    原文:https://blog.csdn.net/csdn_dengfan/article/details/53907416

  • 相关阅读:
    .netcore利用DI实现级联删除
    识别手写数字增强版100%
    嗨!请查收这道有趣的面试题
    理解TCP/IP协议栈之HTTP2.0
    基于Redis的分布式锁和Redlock算法
    从生日悖论谈哈希碰撞
    Redis面试热点工程架构篇之数据同步
    Redis面试热点之底层实现篇(续)
    saltstack安装+基本命令
    25个iptables常用示例
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453217.html
Copyright © 2011-2022 走看看