php 変数は、「zval」という変数コンテナーに存在します。「zval」変数コンテナーには、変数の型と値が含まれており、また、変数が参照であるかどうかを示す 2 バイトの追加情報も含まれています。 「refcount」は、この zval 変数コンテナ内の変数の数を指します。
xdebug がインストールされている場合は、xdebug_debug_zval() を使用して「zval」情報を表示できます。以下の通り:
rreee
Result:
str:
(refcount=1, is_ref=0),
string 'phpddt.com' (length=10)
変数コンテナが入っている場合のみ"refcount" は 0 になると破棄されます。変数を unset() すると、目的の "zval" の refcount が 1 減ります。数日前に発生した参照の設定解除の問題について話しましょう:
<?php $str = "phpddt.com"; xdebug_debug_zval('str');
結果:
b:
(refcount=1, is_ref=0), string 'aaa' (length=3)
参照カウンタの問題の話が続きますが、配列とオブジェクト準拠では状況が異なります。タイプ:
rreee
結果:
arr:
(refcount=1, is_ref=0),
array
'a' => (refcount=1, is_ref=0),string ' aaa' (length= 3)'b' => (refcount=1, is_ref=0),string 'bbb' (length=3)
arr:
(refcount=1, is_ref=0),
配列
'a' => (refcount=2, is_ref=0),string 'aaa' (length=3)
'b' => (refcount=1, is_ref=0) ' (length= 3)
'aaa' => (refcount=2, is_ref=0),string 'aaa' (length=3)
元の配列要素と新しく追加された配列要素が関連付けられていることがわかります同じ A zval 変数コンテナと「refcount」 2 を使用します。私は、他の人にインスピレーションを与えるためにここにいます。
PHP リファレンス カウンタの詳細については、マニュアルを参照してください: http://php.net/manual/zh/features.gc.refcounting-basics.php
転載歓迎! 元のアドレス: http://www.phpddt.com/php/gc-refcounting-basics.html、転載する場合はアドレスを明記してください。ありがとうございます。