Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

`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

1Answer

Comments

  1. @Hashibirokou

    Questioner

    確かに、is_refはフラグでした:

    1つ目は「is_ref」と呼ばれ、変数が「参照集合」の一部かどうかを示すブール値 です。

    ご回答ありがとうございます。

Your answer might help someone💌