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