引用类型_zend_reference

本文最后更新于:2023年12月5日 晚上

<?php
$a = "string";
$b = &$a;
echo $a;
echo $b;

$b = "hello!";
echo $a;
echo $b;

unset($b);
echo $b;
echo $a;

4、5 行输出$a和$b 都是引用类型,$b引用$a,但是$a也会变成引用类型 zend_reference,$a 和$b 的 zval 都指向同一个 zend_reference。zend_reference 中的 zval 中的 u1.type=6,表示字符串类型, p *z.value.ref.val.value.str.val@6 string

8、9 行$a和$b 指向的 zend_reference 中的 zval 类型还是字符串,但是打印出来已经都是 helle!了

12 行 $b 指向的 zval 显示类型是 0,也就是 IS_UNDEF

13 行 $a 的 zval 的 type 依然是 10(引用类型), 打印仍然是 hello!

可以看出, 11 行 unset($b)的操作,仅仅是把$b 的 zval 中的 type 由 10 改成 0, 其他的完全不动。


引用类型_zend_reference
http://blog.lujinkai.cn/PHP/源码/引用类型_zend_reference/
作者
像方便面一样的男子
发布于
2020年12月9日
更新于
2023年12月5日
许可协议