php 赋值原理详解

1 先看左值 是否是引用 若是 直接将右值赋值给左变量。。左边引用计数不变


2 左值不是引用,且计数ref_count=1 

       左值==右值 则左值 经历一次减一 加一操作($a=&$a 则同时会设置is_ref=1)

      左值!= 右值 则看右值 有无& 符号(注意有无此符号 和 此值 是否已经是 引用 并无直接关系。。如果右值 不是引用类型变量  此符号会将右值is_ref=1)

                    若无    且右值非引用变量(is_ref=0) 则将右值引用加一 左值销毁 否则 销毁左值 使用右变量值(is_ref=1)重新初始化生成一个ref_count=1的变量

                    若有 则将右值的ref_count+1  左值销毁  返回右值 (例如 $b = 1;&$b; $a=&b, 则a和b都是is_ref=1的变量)

 3 左值ref_count>1 则减一即可 其他逻辑与2类似


来源php 内核深入理解


注意foreach($arr as $key=>&$val) 这来$val是引用 和 $a = &$b (a是引用) 注意这里区别


若一个函数 需要一个值类型大数组 硬是传递一个引用类型的 则传参时会发生大量的参数赋值过程 浪费时间

你可能感兴趣的:(php 赋值原理详解)