这是我的设置:
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 行的代码时不创建符号ie
$a;
。由于 xdebug_debug_zval 没有找到符号/变量名称“a”。根据 Reference Counting Basics中的声明,没有创建 zval 容器。2] 只有在遇到类似于code2 ie的第 3 行的
代码时才会创建符号。即,仅当变量与常量值相关联时才会创建符号,并且根据引用计数基础中的语句创建 zval 容器并与符号“a”相关联。而code2 的第 1 行即是一段无用的代码。$a = "abcd";
$a;
有关 xdebug_debug_zval 的信息,请访问此处。