これは私の設定です:
display_startup_errors = on
display_errors = on
error_reporting = E_ALL | E_STRICT
//code1:
$a = "abcd";
xdebug_debug_zval('a');
上記のコード行は、zval コンテナーを作成し、それをシンボル a' に関連付けます。そして、次のo / pを提供します。
a: (refcount=1, is_ref=0)='abcd'
次のコードを検討してください。
//code2:
$a;
echo":";xdebug_debug_zval('a'); echo "<br/>";
$a = "abcd";
xdebug_debug_zval('a'); echo "<br/>";
o/p を生成します。
:
a: (refcount=1, is_ref=0)='abcd'
PHPマニュアルの参照カウントの基本から:定数値で新しい変数が作成されると、zvalコンテナーが作成されます
これはつまり、
1] code2 の 1 行目と同様のコードが発生した場合、シンボルは作成されません
$a;
。xdebug_debug_zval はシンボル/変数名「a」を見つけられないため。Reference Counting Basicsのステートメントによると、 zval コンテナーは作成されません。
2] シンボルは、code2 の 3 行目と同様のコード$a = "abcd";
に遭遇した場合にのみ作成されます。つまり、変数が定数値に関連付けられている場合にのみシンボルが作成され、参照カウントの基本のステートメントに従って、zval コンテナーが作成され、シンボル 'a' に関連付けられます。そして、code2 ie の 1 行目$a;
は役に立たないコードです。
xdebug_debug_zval の詳細については、こちらをご覧ください。