• 引用变量 php面试总结1


    (1)PHP引用变量

      概念:不同的变量名,访问同一个变量内容,使用&

      知识点:

      使用php函数

      (a)memory_get_usage() 查看内存使用情况

    eg

    // 定义一个变量
    $a = range(0, 1000);
    var_dump(memory_get_usage());

    运行结果

      (b)xdebug_debug_zval() zval变量容器

    eg

    // zval变量容器
    $a = range(0, 3);
    xdebug_debug_zval('a');

    运行结果

    refcount指在这个空间的变量有1个 is_ref指是否为引用变量 0为不是引用变量,1为是引用变量

      (c) unset 只会取消引用,不会销毁空间

    eg

    <?php
    
    // unset 只会取消引用,不会销毁空间
    $a = 1;
    
    $b = &$a;
    
    unset($b);
    
    echo $a. "
    ";

    运行结果

    过程

       (d)对象不会进行空间的复制,对象本身就是引用传递(要复制需要clone,相关链接https://blog.csdn.net/sinat_29091823/article/details/72637192

    eg

    <?php
    
    // 对象本身就是引用传递
    class Person
    {
        public $name = "zhangsan";
    }
    
    $p1 = new Person;
    xdebug_debug_zval('p1');
    
    $p2 = $p1;
    xdebug_debug_zval('p1');
    
    $p2->name = "lisi";
    xdebug_debug_zval('p1');

    运行结果已经过程

      使用PHP引用变量前 eg:

    <?php
    
    // 定义一个变量
    $a = range(0, 1000);
    var_dump(memory_get_usage());
    
    // 定义变量b,将a变量的值赋值给b
    // COW Copy On Write
    $b = $a;
    var_dump(memory_get_usage());
    
    // 对a进行修改
    $a = range(0, 1000);
    var_dump(memory_get_usage());

     运行结果

    过程图

      使用PHP引用变量后 eg:

    <?php
    
    // 定义一个变量
    $a = range(0, 1000);
    var_dump(memory_get_usage());
    
    // 定义变量b,将a变量的值赋值给b
    $b = &$a;
    var_dump(memory_get_usage());
    
    // 对a进行修改
    $a = range(0, 1000);
    var_dump(memory_get_usage());

    运行结果

    过程图

     

     面试题

    <?php
    
    /**
     * 写出如下程序的输出结果
     * <?php
     *
     * $data = ['a', 'b', 'c'];
     *
     * foreach($data as $key => $val)
     * {
     *      $val = &$data[$key];
     * }
     * 程序运行时,每一次循环结束后变量$data的值是什么?请解释
     * 程序执行完成后,变量$data的值是什么?请解释
     */
    
    $data = ['a', 'b', 'c'];
    
    foreach ($data as $key=>$val)
    {
        $val = &$data[$key];
        var_dump($data);
    }
    
    var_dump($data);

  • 相关阅读:
    Tizen Sample Web Applications
    Linux下RPM软件包的安装及卸载
    libevent
    GTest 运行参数
    【BBC micro:bit基础教程】02-micro:bit与人体运动检测传感器
    【BBC micro:bit基础教程】01-如何用按键控制一个LED
    CMD下查询Mysql中文乱码的解决方法
    php foreach 使用&(与运算符)引用赋值要注意的问题
    sql必知必会(第四版) 学习笔记一
    test
  • 原文地址:https://www.cnblogs.com/apesplan/p/9148777.html
Copyright © 2020-2023  润新知