PHP:动态检索全局变量
我试图编写一个简单的包装器类来获取全局变量的值。我想这样使用它:PHP:动态检索全局变量,php,Php,我试图编写一个简单的包装器类来获取全局变量的值。我想这样使用它: print_r($class->session()->getAll()); print_r($class->cookie()->getAll()); 以下是我所拥有的: class GlobalVars() { private $current; public function session() { $this->current = 'SESSION'; return
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());
在这个例子中,我得到了一条
注意:未定义变量:\消息。我需要修改什么才能让它工作?它不会像这样工作的。你需要:
使用varVars是一种非常糟糕的方法,因为它不可读,而且通常IDE不知道您在使用什么,而且很容易得到错误代码。在我看来,这只是您犯的一个简单的语法错误。你所做的:
public function getAll() {
return $_{$this->current}; // Obviously wrong
}
但从字符串模拟变量的正确方法是:
public function getAll() {
return ${"_".$this->current};
}
我已经测试过了。其他变量的类似行为。文档中关于变量的更多信息:现在,你为什么要这样做?你可以用一个叫做“变量”的功能来做,但这是一个糟糕的主意,所以我将把它留给你去查找。不要为了抽象而抽象。让你的每个公共功能从适当的变量中查找你想要的。这是一个缺乏良好建筑设计知识的典型例子,导致了完美的过度工程。这是一个完全有效的问题,伙计们,我不知道你为什么要关闭它。当然,这可能是过度工程化,但问题是“该怎么做才能使它工作”,而不是“这是一个伟大的代码”?依我看,如果你决定继续这样做。这是一个糟糕的想法,因为目前在一个地方有很多不受控制的全球状态。您需要能够在get
函数中指定要从哪个源检索变量。i、 e.公共函数get($key,$source){…
。否则,您需要能够指定搜索您提供的$key
的顺序的层次结构。此外,您需要指定返回第一个找到的或要查找的位置列表中的所有位置。请仔细考虑这一点。您可以查看“配置”类。请不要给他更多ideas。
public function getAll() {
return ${"_".$this->current};
}