什么时候在PHP中创建'symbol'/'variable name'?

时间:2011-12-23 07:53:14

标签: php variables php-internals

这是我的设定:
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

1 个答案:

答案 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