1

これは私の設定です:
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 の詳細については、こちらをご覧ください

4

1 に答える 1

0


$b;
xdebug_debug_zval('b'); echo "<br/> ";
echo $b;

上記のコードは次のように出力されます。

Notice: 未定義の変数: b in /path/to/file/file.php 行 'some line number'

ただし、上記のコードで xdebug_debug_zval はエラーをスローしていません!!

$ba定数値を代入し、

$b = "hello";
xdebug_debug_zval('b'); echo "<br/> ";
echo $b;

b: (refcount=1, is_ref=0)='こんにちは' こんにちは

上記のコードは、「シンボル」/「変数名」が定数が関連付けられている場合にのみ作成されることを証明しています。つまり、「シンボル」
/
「変数名」は、zval が作成される可能性がある場合にのみ作成されます。

変数にNULLが割り当てられている場合、シンボルを作成できます。

$b = null;
xdebug_debug_zval('b'); echo "<br/> ";
echo $b;

上記のコードは次を出力します。

b: (refcount=1, is_ref=0)=NULL

于 2011-12-23T21:35:58.930 に答える