• 【PHP】关于对普通传递和&引用传递、浅拷贝与深拷贝clone、call_user_func_array的一些思考


    ###

    浅拷贝=&赋值:指两个或多个变量使用同一块内存地址;通常变量使用&进行引用,&$var, &[], &$bool,使用同一块内存地址;

    深拷贝clone,普通=赋值:类对象或模型对象,开辟两块内存地址;或者普通变量 通过 【=赋值】,为$a = $b = [1,2,3],$a,$b使用不同内存地址;

    ###

    /**
    * call_user_func_array在动态方法、静态方法、匿名方法中使用
    */
    echo call_user_func_array([$this, 'func1'], []);
    echo call_user_func_array('self::static1', []);

    $real = '实参';$new_arr = [];
    $res = call_user_func_array(function($arr,$b) use ($real, $new_arr){
    if(is_array($arr)){//已证明是第一个参数,否数组
    foreach ($arr as $i){
    array_push($new_arr, $i);
    }
    }
    return $arr;
    array_push($new_arr, $real);
    return $new_arr;
    }, [1,2,3,4]);
    var_dump($res);//1
    exit;

    /**
    * 普通与引用& | 浅拷贝与深拷贝 -- 区别联系
    */
    // 普通类型变量
    ##$a = $b = [1,2];//普通赋值 -- 两块内存、深拷贝
    $b = [1,2]; //&引用赋值 -- 一块内存、浅拷贝
    $a = &$b;
    $b[1] = 22;
    dd($a[1]);//22
    // 对象类型变量
    $a = $b = OrderTrace::first();//浅拷贝 -- 同一块内存
    ##$a = clone $b = OrderTrace::first();//深拷贝 -- 开辟两块内存
    $b->order_id = '1';
    dd($a->order_id);//1,,, $a->order_id='200418456456451120';
    }
    public function func1( )
    {
    return 1;
    }
    public function static1( )
    {
    return 'static1';

    }

  • 相关阅读:
    数据库设计——多表之间的关系
    约束
    DQL
    DML
    DDL
    Mysql——基础
    IT大牛关注链接
    deepin20安装Python3.85
    Python中的模块
    python中的装饰器
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/14721239.html
Copyright © 2020-2023  润新知