PHP:动态检索全局变量

时间:2018-04-03 12:58:18

标签: php

我正在尝试编写一个简单的包装类来获取全局变量的值。我想这样用它:

print_r($class->session()->getAll());
print_r($class->cookie()->getAll());

这就是我所拥有的:

class GlobalVars() {

  private $current;

  public function session() {
    $this->current = 'SESSION';
    return $this;
  }

  public function cookie() {
    $this->current = 'COOKIE';
    return $this;
  }

  public function getAll() {
    return $_{$this->current}; // Obviously wrong
  }

  public function get($key) {
    if (!isset($_{$this->current}[$key])) { // Obviously wrong
      return false;
    }

    return $_{$this->current}[$key]; // Obviously wrong
  }

  public function set($arr) {
    if (is_array($arr)) {
      foreach ($arr as $k => $v) {
        $_{$this->current}[$k] = $v;
      }
    }
  }

}

$class = new GlobalVars();

print_r($class->session()->getAll());

通过这个例子,我得到一条Notice: Undefined variable: _消息。我需要修改什么才能使其正常工作?

2 个答案:

答案 0 :(得分:1)

它不会像这样工作。您需要variable variables

$var = "_{$this->current}";
var_dump($$var['rnd']);

Example

使用varVars非常糟糕,因为它不可读,而且IDE通常不知道你在使用什么,而且很容易得到错误的代码。

答案 1 :(得分:1)

在我看来,这只是一个简单的语法错误。你做了什么:

  public function getAll() {
    return $_{$this->current}; // Obviously wrong
  }

但是从字符串模拟变量的正确方法是:

  public function getAll() {
    return ${"_".$this->current};
  }

我测试了它。其他变量的行为类似。有关文档中变量变量的更多信息:http://php.net/manual/en/language.variables.variable.php