使用动态名称

时间:2016-10-17 09:46:06

标签: php

以下代码正在运作

<?php
print_r(array_merge(${"_".$_SERVER['REQUEST_METHOD']}, $_GET));
?>

但是当我在函数或类中使用此代码时,存在问题

<?php
class Request {
    public static function init() {
        return array_merge(${"_".$_SERVER['REQUEST_METHOD']}, $_GET);
    }
}

print_r(Request::init());
?>

结果返回一个包含2个错误的空数组:

  • 注意:未定义的变量:第4行的_GET
  • 警告: array_merge():参数#1不是第4行的数组

警告是合乎逻辑的,但我不理解通知。有没有人遇到过这个问题?有解决方案吗? PHP核心存在问题?

1 个答案:

答案 0 :(得分:1)

documentation(页面底部):

  

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

使用:$GLOBALS superglobal

,而不是使用变量语法变量
<?php
class Request {
    public static function init() {
        return array_merge($GLOBALS["_".$_SERVER['REQUEST_METHOD']], $_GET);
    }
}

print_r(Request::init());
?>