$_POST['asdf'] = 'something';
function test() {
// NULL -- not what initially expected
$string = '_POST';
echo '====';
var_dump(${$string});
echo '====';
// Works as expected
echo '++++++';
var_dump(${'_POST'});
echo '++++++';
// Works as expected
global ${$string};
var_dump(${$string});
}
// Works as expected
$string = '_POST';
var_dump(${$string});
test();
我不知道为什么这样的行为......任何人都可以解释..我需要知道为什么会有这样的行为。我实际上没有得到代码..
答案 0 :(得分:10)
查看here
请注意变量变量 不能与PHP的Superglobal一起使用 函数或类中的数组 方法。变量$ this也是一个 不能的特殊变量 动态引用。
答案 1 :(得分:4)
PHP没有真正的全局变量。 “超级全球”也是用词不当。 $_POST
和$_GET
永远不会出现在局部变量哈希表中。它们作为别名存在,PHP只能看到普通访问。变量访问方法只能查看当前的本地哈希表。
global $$string;
// $$string = & $GLOBALS[$string];
在本地哈希表中创建对超全局的引用是一个很好的技巧。这就是为什么在该语句之后,您可以使用变量来访问“superglobals”。