zoukankan      html  css  js  c++  java
  • php引用变量

    php引用变量的概念和定义方式

    概念:在php中引用意味着不同的名字访问同一个变量内容。

    定义方式:使用&符号

    工作原理:

    <?php
    header("content-type:text/html;charset=utf-8");
    //定义一个变量a
    $a = range(0,100);
    var_dump(memory_get_usage());//查看内存使用情况
    echo "</br>";
    //定义变量b,将a变量的值赋值给b,遵循写时改变(copy on write)的原则
    $b = $a;
    var_dump(memory_get_usage());
    echo "</br>";
    //对a进行修改
    $a = range(0,100);
    var_dump(memory_get_usage());
    ?>

    三次输出的内存使用情况分别为:int(144640) 、int(144688) 、int(153368),可知,由于遵循写时改变的原则,a指向了新的空间,故第三次打印内存占用时数值明显增大。

    <?php
    header("content-type:text/html;charset=utf-8");
    //定义一个变量a
    $a = range(0,100);
    var_dump(memory_get_usage());//查看内存使用情况
    echo "</br>";
    //定义变量b,将a变量的值赋值给b,遵循写时改变(copy on write)的原则
    $b = &$a; //改为引用复制,此时a和b永远指向同一个空间,而不会复制
    var_dump(memory_get_usage());
    echo "</br>";
    //对a进行修改
    $a = range(0,100);
    var_dump(memory_get_usage());
    ?>

    此时,打印出来的结果分别为:int(144640) 、int(144688) 、int(144680),区别不大,由此可知,a和b还是指向同一空间,当对a进行修改时,就是对a和b共同指向的空间内容的修改。

    需要指出的是,unset()函数只会取消引用,而不会销毁空间

    <?php
    header("content-type:text/html;charset=utf-8");
    $a = 1;
    $b = &$a;
    unset($b);
    echo $a."
    "; //结果输出1
    ?>

    对象也遵循引用思想,而不是写时复制,例如:

    <?php
    header("content-type:text/html;charset=utf-8");
    class Person{
        public $name = "xiaolin";
    }
    $p1 = new Person();
    $p2 = $p1;
    $p2->name = "xiaolinzi";
    ?>

    在这个例子中,p1和p2同时指向同一个空间,若$p2->name改变,则是该空间的内容进行修改。

  • 相关阅读:
    scrapy怎么设置带有密码的代理ip base64.encodestring不能用 python3.5,base64库里面的encodestring()被换成了什么?
    ace模板dataTables_length控制是否显示分页
    Django AUTHENTICATION_BACKENDS
    Django自定义User模型和登录验证
    一个简单的django user.is_authenticated问题
    PHP函数(四)-变量函数
    PHP函数(三)-递归函数
    Python多进程
    Python多线程-生产者消费者模型
    Python多线程-队列
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/9889979.html
Copyright © 2011-2022 走看看