【问题标题】:When does a 'symbol' / 'variable name' get created in PHP?什么时候在 PHP 中创建“符号”/“变量名”?
【发布时间】: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


【解决方案1】:


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

上面的代码会输出:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2016-01-21
    • 2012-09-02
    • 2010-11-08
    相关资源
    最近更新 更多