这是一个PHP变量的变量错误?
这是否有合理的解释?这是一个PHP变量的变量错误?
<?php
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
?>
如果您尝试
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
die("<pre>" . print_r(get_defined_vars(), true) . "</pre>");
你可以看到,它已经临时用户与没有名字的变量,因此,是的,根据PHP的命名规则,这将是一个错误
我敢打赌,它的定义变量的东西的${''}
沿着这些线路的影响,或没有名字的变量,或东西。
由于既不$a
也不$aa
也不$aaa
被定义,它们在可变可变上下文中使用时都指向相同的时髦,空白变量名。
那么,如果$ a是空的,那么您将设置一个空变量名称='hello world'...因此,每当您引用空变量名称时,您都会得到存储的内容。 。
这就像
$a = '';
$$a = 'Foo Bar';
$b = '';
echo $$b; //Displays Foo Bar
你没有得到它的权利,考虑一下:
$a = 'hello';
$hello = "hello again";
echo $$a;
输出:
hello again
在你的情况,你有没有设置下列变量的值,因此它输出相同。
说明:
当你做$$a
,它意味着:
$ $a;
^ ^
$ used for php vars means a's value that is hello
所以就变成:
$hello
,其值是:
hello again
我了解变量变量,我只是觉得可以有一个未命名的变量,或者一个变量的空值或空字符串作为其名称。 – Dami 2010-07-23 13:22:32
在做
$$a = 'foo';
你说拿的$a
值。将其转换为字符串。使用字符串作为变量名称来为其分配'foo'
。由于$a
未定义,并且返回NULL
,当将字符串转换为字符串时,它是''
,您正在分配变量${''}
;
echo ${''}; // 'foo'
讽刺的是,你可以做
你可以做
${''} = function() { return func_get_arg(0); };
echo ${''}('Hello World');
// or
echo $$x('Hello World');
这将触发通知有关$x
被不确定的,但输出Hello World
然后。够滑稽的,下面不工作:
${''} = function() { return func_get_arg(0); };
echo $x('Hello World');
,因为它触发致命错误:函数名称必须是一个字符串。新奇:d
由于PHP手册说
Variable names follow the same rules as other labels in PHP. A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores.
我会考虑能确实分配一个空命名变量的错误。
有一个有点相关的bug提交了本已:
这可能是不,它不是,他没有得到正确的PHP 5.3的行为 – Dami 2010-07-23 13:12:30
。 – Sarfraz 2010-07-23 13:20:18
谢谢大家。换句话说,这是有道理的。 echo $ {null}; 也是有效的。 – Dami 2010-07-23 13:21:04