php中的可变变量和引用赋值有什么区别?

企鹅博客
19276
文章
0
评论
2019年7月12日15:52:42 评论 2.5K views 600字阅读2分0秒

从PHP内核的角度跟你解释下吧,你可以深入理解下,就完全明白了;

PHP的变量在内核中都是通过C语言的结构zval来存储的(你没学过C,你可以理解为是个对象,里面的成员变量都是类的属性,暂时先这样理解),zval结构如下:

struct _zval_struct {
zvalue_value value; // 存储变量的值
zend_uint refcountgc; //表示引用计数 默认为:1
zend_uchar type; // 变量具体的类型
zend_uchar is_refgc; //表示是否为引用
};

举个例子,php代码如下:

$a = 10;
$b = $a;

这时$b没有引用,只是将$a的值赋给了$b,那么zval这个结构中的refcountgc就变为2了,而is_refgc还是false,表示未引用,因为内核$a已经开辟了一块内存空间,当$a赋值给$b时,$b的值只指向了$a,这样就省去了重新开辟一块内存,但是当$b值被改变时($a的值不会变),$b又将会开辟一块新的内存空间,这就是所以的写时复制,PHP变量在内核中的如何存储了,下面就讲下引用:

$a = 10;
$b = &$a;

这个时候,内核中存储$a的结构is_refgc标记为true,代表是引用,那么$a和$b都指向了同一个内存地址,当$b=20的时候,$a也会变成20

以上就是php中的可变变量和引用赋值有什么区别?的详细内容,更多请关注php教程网其它相关文章!

  • 版权声明: 发表于 2019年7月12日15:52:42
  • 转载注明:https://www.qieseo.com/239876.html
PHP实现获取指定日期是星期几的方法 php教程

PHP实现获取指定日期是星期几的方法

这篇文章主要介绍了PHP实现获取指定日期是星期几的方法,涉及php针对日期的读取、判断与字符串、数组相关运算操作技巧,需要的朋友可以参考下 本文实例讲述了PHP获取指定日期是星期几的实现方法。分享给大...
PHP编辑器PhpStrom运行缓慢 php教程

PHP编辑器PhpStrom运行缓慢

最近在使用phpstorm开发项目的时候,在加载文件运行时,不管有多大,如果项目文件数据比较多的话,都能够让phpstorm卡到死机。其中调整过内存设置,关闭过动态提示,使用过phpstorm的安全模...
php隐藏文件实际下载地址的方法 php教程

php隐藏文件实际下载地址的方法

这篇文章主要介绍了php隐藏实际地址的文件下载方法,涉及php中header与file_get_contents方法的相关使用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php隐藏实际...
PHP四舍五入、取整、round函数使用 php教程

PHP四舍五入、取整、round函数使用

这篇文章主要介绍了PHP四舍五入、取整、round函数使用示例,需要的朋友可以参考下 小数例子: PHP保留两位小数并且四舍五入 复制代码 代码如下: $n=0.1265489; echo sprin...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: