使用变量变量时,PHP Globals访问问题

时间:2011-02-21 12:22:40

标签: php eval globals variable-variables

我在类函数中有这一行:

$this_value = eval("return $$existing_value;");

这给了我在函数中设置$$existing_value变量时所需的值,但我发现在99%的情况下我实际上需要访问全局范围。我尝试将其重写为$this_value = eval("return global $$existing_value;");,但这会返回php错误。

有没有人知道我怎么能正确地做到这一点? (顺便说一句,我知道这代表的不良实践 - 但鉴于这种情况,我想不出任何其他方法)

4 个答案:

答案 0 :(得分:2)

尝试

$this_value = eval('global $existing_value; return $$existing_value;');

$this_value = eval('global $$existing_value; return $$existing_value;');

答案 1 :(得分:1)

$x = 3;

function sss()
{
    $x = 1;
    $y = eval('global $x; return $x;');
    var_dump($y);
}
sss();

输出int(3),所以它有效,但要注意双引号和简单的引号!

答案 2 :(得分:0)

由于eval返回了您需要的值,因此您只需将返回值分配给$_GLOBAL$_SESSION(首选因为$_GLOBAL是邪恶的)超级全局变量。< / p>

$foo['bar'] = "pie";
$fixed_name_variable = "foo['bar']";
$_GLOBAL['foo'] =  eval("return $$fixed_name_variable;");
echo $_GLOBAL['foo']; // pie

答案 3 :(得分:0)

我一直在思考这个过程。我已经放弃了我可以添加一个具有固定名称的新数组,该函数的各种进程可以以编程方式添加所需的值,而不是尝试猜测名称。

它也比变量变量更安全可靠。