`xdebug_debug_zval`の出力がよくわからない
解決したいこと
xdebug_debug_zval
を使用したコードの出力について、自分の理解が正しいのか第三者に伺いたい。
PHP8で
$i = 1;
xdebug_debug_zval('i');
$i2 = $i;
xdebug_debug_zval('i');
$i3 = &$i;
xdebug_debug_zval('i');
を実行したら、以下の結果になと思う:
i: (refcount=1, is_ref=0)=1
i: (refcount=2, is_ref=0)=1
i: (refcount=2, is_ref=1)=1
(理由)
$i = 1;
より変数コンテナが作成される。
一回目のxdebug_debug_zval
:
上記のコンテナを指すシンボルは$i
のなのでrefcountは1
二回目のxdebug_debug_zval
:
上記のコンテナを指すシンボルは$i2
と$i
の二つなので、
refcountは2
三回目のxdebug_debug_zval
:
$i3 = &$i;
という参照代入よりis_refが1増える。参照代入でrefcountは増えないので2のまま
0