<?php $a = "new string"; ?>
上の例では、新しい変数 a が現在のスコープで生成されます。そして、型が文字列、値が新しい文字列の変数コンテナが生成されます。追加の 2 バイトの情報では、カスタム参照が生成されないため、「is_ref」はデフォルトで FALSE に設定されます。
この変数コンテナを使用する変数が 1 つだけであるため、「refcount」は 1 に設定されます。「refcount」の値が 1 の場合、「is_ref」の値は常に FALSE になることに注意してください。 » Xdebugでは、関数xdebug_debug_zval()を呼び出すことで「refcount」と「is_ref」の値を表示できます。
例 #2 zval 情報の表示
<?php xdebug_debug_zval('a'); ?>
上記のルーチンは次のように出力します:
a: (refcount=1, is_ref=0)='new string'
ある変数を別の変数に代入すると、参照数 (refcount) が増加します。
例 #3 zval の参照数を増やす
<?php $a = "new string"; $b = $a; xdebug_debug_zval( 'a' ); ?>
上記のルーチンは次のように出力します:
a: (refcount=2, is_ref=0)='new string'
この時点では、同じ変数コンテナーであるため、参照の数は 2 です。は、変数 a と変数 b の関連付けによって使用されます。PHP は、生成された変数コンテナーが必要でない場合にはコピーしません。
変数コンテナは、「refcount」が 0 になると破棄されます。変数コンテナに関連付けられた変数がそのスコープを離れるとき (例: 関数の実行が終了するとき)、または関数 unset が変数 () に対して呼び出されるとき, "refcount" は 1 つ減ります。次の例で説明します。
例 #4 参照カウントを減らす
<?php $a = "new string"; $c = $b = $a; xdebug_debug_zval( 'a' ); unset( $b, $c ); xdebug_debug_zval( 'a' ); ?>
上記のルーチンは出力します:
a: (refcount=3, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string'
If unset($a) を実行すると、型と値を含む変数コンテナがメモリから削除されます。
関連する推奨事項:
PHP ビデオ チュートリアル: https://www.php.cn/course/list/29/type/2.html
以上がPHPガベージコレクションメカニズムの例の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。