gongzhonghao.png
扫码关注我们
最新赞助活动温馨提示:自愿赞助服务器费用,学生和没有工作的整站资源免费下载!
头像

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

来源:http://erdangjiade.com/topic/3084.html 你好,世界。 2017-09-25 22:42浏览(8)

从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中的可变变量和引用赋值有什么区别?的详细内容,更多请关注二当家的素材网其它相关文章!

评论0
头像

友情提示:垃圾评论一律封号 加我微信:826096331拉你进VIP群学习群

1 2