我试图传递一个变量,其中包含我希望函数处理的超全局数组的名称,但我无法使其工作,它只是声称有问题的变量不存在并返回null 。
我已将我的测试用例简化为以下代码:
function accessSession ($sessName)
{
var_dump ($$sessName);
}
$sessName = '_SERVER';
var_dump ($$sessName);
accessSession ($sessName);
函数外部的var_dump按预期返回$ _SERVER的内容。但是,函数中的var_dump会触发上述错误。
向函数添加global $_SERVER
并没有使错误消失,而是将$ _SERVER分配给另一个变量并使该变量全局起作用(见下文)
function accessSession ($sessName)
{
global $test;
var_dump ($$sessName);
}
$test = $_SERVER;
$sessName = 'test';
var_dump ($$sessName);
accessSession ($sessName);
这是一个PHP错误,还是我只是做错了什么?
答案 0 :(得分:3)
警告强>
请注意,变量变量不能用于函数或类方法中的超全局数组 。变量$ 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');
答案 1 :(得分:2)
来自php.net:
警告强>
请注意,变量变量不能与PHP一起使用 函数或类方法中的超全局数组。变量 $ this也是一个无法引用的特殊变量 动态。
答案 2 :(得分:-2)
答案很简单:从不使用变量 改为使用数组。
(是的 - 你做错了。不,这不是PHP中的错误。)
答案 3 :(得分:-2)
使用$ GLOBALS。你去了:))
<?php
function accessSession ($sessName)
{
var_dump ($GLOBALS[$sessName]);
}
$sessName = '_SERVER';
accessSession ($sessName);