2

我在类函数中有这一行:

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

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

有谁知道我怎样才能正确地做到这一点?(顺便说一句,我知道这代表了糟糕的做法——但鉴于这种情况,我想不出任何其他方法)

4

4 回答 4

2

尝试

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

或者

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

于 2011-02-21T12:27:23.777 回答
1
$x = 3;

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

会输出int(3),所以它可以工作,但要小心双引号和单引号!

于 2011-02-21T12:30:52.060 回答
0

由于 eval 正在返回您需要的值,因此您应该将返回值分配给$_GLOBALor $_SESSION(因为$_GLOBAL是邪恶的)超级全局变量。

$foo['bar'] = "pie";
$fixed_name_variable = "foo['bar']";
$_GLOBAL['foo'] =  eval("return $$fixed_name_variable;");
echo $_GLOBAL['foo']; // pie
于 2011-02-21T12:41:44.527 回答
0

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

它也将比可变变量更加安全和可靠。

于 2011-02-21T13:16:41.047 回答