Php 超全局可以';不能通过函数中的变量访问?

Php 超全局可以';不能通过函数中的变量访问?,php,Php,我无法通过函数中的变量访问超全局变量。我是问题的根源还是PHP的一个微妙之处?如何绕过它 print_r(${'_GET'}); 很好 $g_var = '_GET'; print_r(${$g_var}); 给我一个提示:未定义变量:_GETPHP无法识别这是一个全局变量访问: 它将$\u-GET和${u-GET'}编译为相同的操作码序列,即全局获取${$g_var}将导致本地获取 以下文件中也提到了这一点: 超全局变量不能用作函数或类方法内部的变量 您可以使用$GLOBALS超全局变量绕

我无法通过函数中的变量访问超全局变量。我是问题的根源还是PHP的一个微妙之处?如何绕过它

print_r(${'_GET'});
很好

$g_var = '_GET';
print_r(${$g_var});

给我一个提示:未定义变量:_GET

PHP无法识别这是一个全局变量访问:
它将
$\u-GET
${u-GET'}
编译为相同的操作码序列,即
全局
获取
<另一方面,code>${$g_var}将导致
本地
获取

以下文件中也提到了这一点:

超全局变量不能用作函数或类方法内部的变量


您可以使用
$GLOBALS
超全局变量绕过它。而不是写作

function & getSuperGlobal($name) {
    return ${"_$name"};
}
你可以写

function & getSuperGlobal($name) {
    return $GLOBALS["_$name"];
}

结果将是相等的。

最近的PHP版本似乎很好地解决了这个问题。 下一段代码在PHP5.5.9中运行良好

<?php

function foo() {
  print_r(${'_SERVER'});
}

foo();

尽管如果在函数中包含
global${$g_var}
(对于任何普通的全局变量都需要这样做),那么它看起来工作正常吗?这是一个可行的解决方法,还是有其他注意事项?(相关)