您的位置:首页 > 编程语言 > PHP开发

php 赋值原理详解

2015-12-25 20:25 656 查看
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是引用) 注意这里区别

若一个函数 需要一个值类型大数组 硬是传递一个引用类型的 则传参时会发生大量的参数赋值过程 浪费时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: