提问人:YsoL8 提问时间:2/21/2011 最后编辑:MachavityYsoL8 更新时间:6/24/2018 访问量:669
使用变量变量时出现 PHP 全局访问问题
PHP Globals access issue when using a variable variable
问:
我在类函数中有这一行:
$this_value = eval("return $$existing_value;");
这给了我在函数中设置变量时所需的值,但我发现在 99% 的情况下,我实际上需要访问全局范围。我尝试将其重写为 ,但这会返回 php 错误。$$existing_value
$this_value = eval("return global $$existing_value;");
有谁知道我如何正确地做到这一点? (顺便说一句,我知道这代表了糟糕的实践 - 但鉴于这种情况,我想不出任何其他方法)
答:
2赞
user479911
2/21/2011
#1
尝试
$this_value = eval('global $existing_value; return $$existing_value;');
或
$this_value = eval('global $$existing_value; return $$existing_value;');
评论
0赞
YsoL8
2/21/2011
我认为第二行适用于单个值,但它在数组的 I.m 搜索中窒息。我在意外的“[”上遇到PHP错误,这是数组引用的左括号。
0赞
Poelinca Dorin
2/21/2011
我在使用双引号时遇到错误,也许这会为您指出正确的方向: ' 解析错误:语法错误,/var/www/index.php(19) 中的意外T_LNUMBER:eval()'d 代码在第 1 行调用堆栈:0.0006 645576 1。{主要}() /var/www/index.php:0 0.0007 646552 2.sss() /var/www/index.php:22 bool(false) '
0赞
2/22/2011
@YsoL8我更新了我的答案。我将双引号改为单引号。您是否尝试过使用单引号而不是双引号?
1赞
Poelinca Dorin
2/21/2011
#2
$x = 3;
function sss()
{
$x = 1;
$y = eval('global $x; return $x;');
var_dump($y);
}
sss();
将输出,所以它有效,但要小心双引号和简单引号!int(3)
0赞
xzyfer
2/21/2011
#3
由于 eval 返回的是您需要的值,因此您应该将返回值分配给 or(首选,因为是邪恶的)超级全局变量。$_GLOBAL
$_SESSION
$_GLOBAL
$foo['bar'] = "pie";
$fixed_name_variable = "foo['bar']";
$_GLOBAL['foo'] = eval("return $$fixed_name_variable;");
echo $_GLOBAL['foo']; // pie
评论
0赞
YsoL8
2/21/2011
这为 $_GLOAL 数组增加了一个值,对吧?我需要取一个值 - 但看看我给出的答案。
0赞
YsoL8
2/21/2011
#4
我一直在重新思考这个过程。我已经意识到,我可以添加一个具有固定名称的新数组,该数组有助于此功能的各种进程可以通过编程方式添加所需的值,而不是试图猜测名称。
它也将比变量更安全和可靠。
评论