重要提示:
$GLOBALS
是肮脏和邪恶的。不要使用它们。永远。从来没有 请关注它不起作用的事实而不是为什么你首先要这样做,这纯粹是关于技术练习的理论问题。
这是一个相当奇怪的。我正在尝试使用名为$GLOBALS
的字符串构建变量变量。
来自全球范围
让我们看看var_dump()
在全球范围内我们得到了什么。
$g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(83));
var_dump($$g);
结果是一组全局变量,您可以看到here。大!所以,让我们在一个函数中尝试这个。
从功能范围
首先,让我们确保我们可以在函数中实际执行$GLOBALS
检查。
function globalAllTheThings()
{
var_dump($GLOBALS);
}
globalAllTheThings();
结果是:它的工作原理 !!您可以看到此here。
现在,让我们尝试我们在全局范围内使用的第一个测试,看看会发生什么。
function globalAllTheThings()
{
$g = sprintf('%s%s%s%s%s%s%s', chr(71), chr(76), chr(79), chr(66), chr(65), chr(76), chr(83));
var_dump($$g);
}
globalAllTheThings();
为了简单起见
你也可以尝试这个而不用这种奇怪的混淆(不要问)。
function globalAllTheThings()
{
$g = 'GLOBALS';
var_dump($$g);
}
globalAllTheThings();
返回NULL
。那是什么意思?为什么它返回NULL
,我该怎么做才能使其正常工作。你为什么问?当然是出于教育目的,对于科学!
答案 0 :(得分:4)
因为手册说的是:
警告强>
请注意,变量变量不能与函数或类方法中的PHP的超全局数组一起使用。变量
$this
也是一个无法动态引用的特殊变量。
这只是“特别”。 PHP是“特殊的”。 Superglobals与常规变量的规则不同。有人忘了或决定不让它们兼容函数中的变量变量。周期。