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 手册的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 的信息,请访问此处

4

1 回答 1

0


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

上面的代码将输出:

注意:未定义的变量:b in /path/to/file/file.php on line 'some line number'

xdebug_debug_zval 并没有在上面的代码中抛出任何错误!!

分配 $ba 常量值,

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

b: (refcount=1, is_ref=0)='hello' 你好

上面的代码证明了“符号”/“变量名”只有在与常量关联时才会创建,

“符号”/“变量名”只有在有可能创建 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 回答