这是我的设定:
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手册Reference Counting Basics的:创建新变量并使用常量值时创建zval容器
这是否意味着,
1]当遇到类似于 code2 的第1行的代码(即
$a;
)时,不会创建符号。由于xdebug_debug_zval未找到符号/变量名称'a'。根据{{3}}的声明,没有创建zval容器 2]仅当遇到类似于代码2 的第3行的代码(即$a = "abcd";
)时才创建符号。即,仅当变量与常数值相关联时才创建符号。根据来自Reference Counting Basics的语句,创建了一个zval容器并将其与符号“a”相关联。而代码2的第1行,即$a;
是一段无用的代码。
有关xdebug_debug_zval的信息,请访问Reference Counting Basics。
答案 0 :(得分:0)
$b;
xdebug_debug_zval('b'); echo "<br/> ";
echo $b;
上面的代码会输出:
注意:未定义的变量:b在/ path/to/file/file.php上的'某些行号'
xdebug_debug_zval虽然没有在上面的代码中引发任何错误!!
将$ b指定为常数值,
$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