PHP传引用赋值底层的变化

$a = 3;
$b = &$a;//传引用,即地址赋值

使用xdebug_debug_zval('a');
使用xdebug_debug_zval('b');
运行结果为:
a:(refcount=2,is_ref=1)=3
b:(refcount=2,is_ref=1)=3
我们发现,当我们传引用赋值的时候,首先refcount变为了2,因为$b 去引用,同时is_ref变为了1,
可以把引用看做是把这个变量的内存地址给赋值过来了

 

然后我们再给$b赋值为5,$b = 5;因为$b指向一个地址,此时结构体不会再分裂了,而是会直接改变结构体的zvalue的值

此时再去echo $a;结果为5
测试:
$a = 3;
$b = &$a;//传引用,即地址赋值
$b = 5;
使用xdebug_debug_zval('a');
使用xdebug_debug_zval('b');
运行结果为:
a:(refcount=2,is_ref=1)=5
b:(refcount=2,is_ref=1)=5

 

posted @ 2019-08-06 11:35  独孤靖云  阅读(188)  评论(0编辑  收藏  举报