我正在尝试编写一个简单的包装类来获取全局变量的值。我想这样用它:
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: _
消息。我需要修改什么才能使其正常工作?
答案 0 :(得分:1)
它不会像这样工作。您需要variable variables:
$var = "_{$this->current}";
var_dump($$var['rnd']);
使用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