【发布时间】:2012-01-26 15:56:56
【问题描述】:
这是我的设置:
display_startup_errors = on
display_errors = 开启
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”。根据来自 Reference Counting Basics 的声明,没有创建 zval 容器。
2] 只有在遇到类似于 code2 的第 3 行 的代码时才会创建符号,即$a = "abcd";。即,仅当变量与常量值关联时才会创建符号,并且根据 Reference Counting Basics 中的 语句创建 zval 容器并与 符号“a”关联。 code2 的第 1 行,即$a;是一段无用的代码。
有关 xdebug_debug_zval 的信息,请访问here。
【问题讨论】:
-
你注意到了,呃,通知了吗?
-
@IgnacioVazquez-Abrams 请原谅我。你想表达什么?
-
当您尝试读取不存在的变量时出现的通知。当然,只有启用了通知显示才能看到...
-
@IgnacioVazquez-Abrams 是的,如果有任何错误,我可以看到:这是我的设置:display_startup_errors = on display_errors = On error_reporting = E_ALL | E_STRICT
-
@IgnacioVazquez-Abrams 为我的推论添加了答案。
标签: php variables php-internals