• php 变量引用,函数引用


    在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。

    引用传递

    function foo ( &$var )
    {$var++;}

    foo ($a);  // 注意在函数调用时没有引用符号 - 只有函数定义中有。光是函数定义就足够使参数通过引用来正确传递了

    引用返回

    function &init_users()
    { ... return $cls;}

    使用引用返回,必须在两个地方都用&符号

    $user = & init_users();

    function &init_users()
    { ...return $cls;}

    取消引用
    当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

    $a="hihaha";
    $b= &$a;
    unset($b);
    echo$a;// shows "hihaha"

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    这里有个php引用的例子,好好看一遍:

     <?php
    //if you do:

    $a="hihaha";
    $b= &$a;
    $c="eita";
    $b=$c;
    echo$a;// shows "eita"

    $a="hihaha";
    $b= &$a;
    $c="eita";
    $b= &$c;
    echo$a;// shows "hihaha"

    $a="hihaha";
    $b= &$a;
    $b=null;
    echo$a;// shows nothing (both are set to null)

    $a="hihaha";
    $b= &$a;
    unset($b);
    echo$a;// shows "hihaha"

    $a="hihaha";
    $b= &$a;
    $c="eita";
    $a=$c;
    echo$b;// shows "eita"

    $a="hihaha";
    $b= &$a;
    $c="eita";
    $a= &$c;
    echo$b;// shows "hihaha"

    $a="hihaha";
    $b= &$a;
    $a=null;
    echo$b;// shows nothing (both are set to null)

    $a="hihaha";
    $b= &$a;
    unset($a);
    echo$b;// shows "hihaha"
    ?>
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    PHP unset全局变量在用户函数中只能销毁局部变量,并不能销毁全局变量。(从PHP4开始unset已经不再是一个函数了,而是一个语句)。如果需要销毁全局变量的应该如何做呢?也很简单,用$GLOBALS数组来实现。

    1. < ?PHP 
    2. function foo() { 
    3. unset($GLOBALS['bar']);  // 而不是unset($bar)
    4. } 
    5. $bar = “something”; 
    6. foo(); 
    7. var_dump($bar); 
    8. ?>

    对于unset:

    1. 该函数只有在变量值所占空间超过256字节长的时候才会释放内存
    2. 只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放(也要执行1的判断)
    也就是检查有无其他变量绑定,有的话就不会释放了。就像这个例子:

    $a="hihaha";
    $b= &$a;
    unset($b);
    echo$a;// shows "hihaha"

    所以建议大家用 $变量=null 的方法来释放其内存。

     给一个测试当前php脚本内存使用情况的函数:

    <?php
    echo memory_get_usage()."\n";
    $a = str_repeat("A", 1000);

    echo memory_get_usage()."\n";

    $b=&$a;  //下面的内存大小不会变,unset只是解除$a的绑定
    unset($a);

    echo memory_get_usage()."\n";
    ?>

    自己理解的仍然不行,看这里:http://www.laruence.com/2011/03/04/1894.html

    原文地址 : http://hi.baidu.com/k45hifz/item/3d375e147d5dbd36b831805e

  • 相关阅读:
    寒假作业4
    UVA5870 乱搞 Smooth Visualization
    UVA5874 Social Holidaying 二分匹配
    UVA5876 Writings on the Wall 扩展KMP
    hdu1231 最大连续子序列
    hdu3535 混合背包
    hdu3613 扩展KMP
    hdu4333 扩展KMP
    扩展KMP
    hdu4287 字典树
  • 原文地址:https://www.cnblogs.com/shistou/p/2960473.html
Copyright © 2020-2023  润新知