3

我试图传递一个变量,其中包含我想要一个函数处理的超全局数组的名称,但我无法让它工作,它只会声称有问题的变量不存在并返回 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 错误,还是我只是做错了什么?

4

4 回答 4

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');
于 2012-03-08T10:44:59.597 回答
2

来自php.net

警告

请注意,变量变量不能在函数或类方法中与 PHP 的超全局数组一起使用。变量 $this 也是一个不能动态引用的特殊变量。

于 2012-03-08T10:43:20.017 回答
-2

使用 $GLOBALS。你去吧:)

<?php

function accessSession ($sessName)
{
    var_dump ($GLOBALS[$sessName]);
}

$sessName   = '_SERVER';

accessSession ($sessName);
于 2012-03-08T10:45:23.143 回答
-2

答案很简单:永远不要使用变量 variables
请改用数组

(是的 - 你做错了什么。不,这不是 PHP 中的错误。)

于 2012-03-08T10:40:43.747 回答