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是引用) 注意这里区别
若一个函数 需要一个值类型大数组 硬是传递一个引用类型的 则传参时会发生大量的参数赋值过程 浪费时间
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是引用) 注意这里区别
若一个函数 需要一个值类型大数组 硬是传递一个引用类型的 则传参时会发生大量的参数赋值过程 浪费时间
相关文章推荐
- phpstorm 快捷键
- php解析html类
- mysql php使用
- php官方文档学习 w3c
- PHP(七)数组
- Jmeter FTP test
- IIS创建ftp服务器和ftp上传发布项目的步骤
- zabbix报PHP gettext extension missing
- PHP 教程
- php 常用函数
- 解析提高PHP执行效率的50个技巧
- 安装xcache3.0.3/3.2,为php加速
- 安装xcache3.0.3/3.2,为php加速
- PHP - 魔术方法
- 黄聪:PHP使用Simple_HTML_DOM遍历、过滤及保留指定属性
- Laravel中的日志与上传
- php【基础学习八】URL编解码
- php【基础学习七】string操作
- MSTP+VRRP组合实现S1和S2的(双交换)热备冗余及负载均衡
- php中图像处理