【发布时间】:2013-08-13 09:47:30
【问题描述】:
重要提示:
$GLOBALS是肮脏和邪恶的。不要使用它们。曾经。从来没有。
请关注它不起作用的事实,而不是首先为什么要这样做,这纯粹是关于技术练习的理论问题。
这是一个相当奇怪的问题。我正在尝试使用名为$GLOBALS 的字符串构造一个变量变量。
从全局范围
让我们看看在全局范围内var_dump()this 会得到什么。
$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,我该怎么做才能让它工作。你为什么问?当然是为了教育目的,以及为了科学!
【问题讨论】:
-
为了简单起见,你不能写
$g = 'GLOBALS'而不是你奇怪的sprintf-chr吗?它不应该影响结果。如果确实如此,那将值得一整个“另一个问题”。 -
因为
${'string'}在给定范围内寻找变量。
标签: php global-variables