Суперглобалы не могут быть доступны через переменные переменные в функции?

Я не могу получить доступ к суперглобалам через переменные переменные внутри функции. Я источник проблемы или это одна из тонкостей PHP? И как обойти его?

print_r(${'_GET'}); 

работает отлично

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

Дает мне уведомление: неопределенная переменная: _GET

PHP не может распознать, что это глобальный доступ к переменной:
Он компилирует $_GET и ${'_GET'} в ту же последовательность операций, а именно global FETCH_R . ${$g_var} с другой стороны, приведет к local FETCH_R .

Это также упоминается в документах :

Суперглобалы не могут использоваться в качестве переменных переменных внутри функций или методов класса.

Вы можете обойти его с помощью супергрупповой переменной $GLOBALS . Вместо написания

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

ты можешь написать

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

и результаты будут равны.

Похоже, что последние версии PHP справляются с этой проблемой. Следующий код отлично работает с PHP 5.5.9.

 <?php function foo() { print_r(${'_SERVER'}); } foo();