提问人:GordonM 提问时间:3/8/2012 更新时间:3/8/2012 访问量:125
具有可变变量的意外行为
Unexpected behaviour with variable variables
问:
我试图传递一个变量,其中包含我想要函数处理的超全局数组的名称,但我无法让它工作,它只会声称有问题的变量不存在并返回 null。
我已将测试用例简化为以下代码:
function accessSession ($sessName)
{
var_dump ($$sessName);
}
$sessName = '_SERVER';
var_dump ($$sessName);
accessSession ($sessName);
函数外部的var_dump返回 $_SERVER 的内容,如预期的那样。但是,函数中的var_dump会触发上述错误。
添加到函数中并没有使错误消失,但是将 $_SERVER 分配给另一个变量并使该变量全局确实有效(见下文)global $_SERVER
function accessSession ($sessName)
{
global $test;
var_dump ($$sessName);
}
$test = $_SERVER;
$sessName = 'test';
var_dump ($$sessName);
accessSession ($sessName);
这是PHP错误,还是我只是做错了什么?
答:
-2赞
Your Common Sense
3/8/2012
#1
答案很简单:永远不要使用变量。
请改用数组。
(是的 - 你做错了什么。不,它不是PHP中的错误。
2赞
ghbarratt
3/8/2012
#2
来自 php.net:
警告
请注意,变量变量不能与 PHP 的 函数或类方法中的超全局数组。变量 $this也是一个不能引用的特殊变量 动态。
3赞
Filip Roséen - refp
3/8/2012
#3
PHP: 变量 - 手册
警告
请注意,变量变量不能在函数或类方法中与 PHP 的超全局数组一起使用。变量 $this 也是一个不能动态引用的特殊变量。
解决 方案
function access_global_v1 ($var) {
global $$var;
var_dump ($$var);
}
function access_global_v2 ($var) {
var_dump ($GLOBALS[$var]);
}
$test = 123;
access_global_v1 ('_SERVER');
access_global_v2 ('test');
-2赞
jpic
3/8/2012
#4
使用$GLOBALS。你去吧:)
<?php
function accessSession ($sessName)
{
var_dump ($GLOBALS[$sessName]);
}
$sessName = '_SERVER';
accessSession ($sessName);
评论