Php 对MVC框架设计中的_get和_set感到困惑
我一直在阅读MVC框架的工作原理和设计模式本身。我可以理解大多数部分,并了解它们是如何结合在一起的,但在许多示例中,我看到了如下内容:Php 对MVC框架设计中的_get和_set感到困惑,php,model-view-controller,design-patterns,overloading,Php,Model View Controller,Design Patterns,Overloading,我一直在阅读MVC框架的工作原理和设计模式本身。我可以理解大多数部分,并了解它们是如何结合在一起的,但在许多示例中,我看到了如下内容: class Registry { private $vars = array(); public function __set($index, $value) { $this->vars[$index] = $value; } public function __get($index) {
class Registry
{
private $vars = array();
public function __set($index, $value)
{
$this->vars[$index] = $value;
}
public function __get($index)
{
return $this->vars[$index];
}
}
在很多教程中,它被称为“注册表”。它通常在init
文件中实例化,并且是调用核心类(路由处理程序、模板等)的一部分,例如在控制器中呈现如下视图$this->registry->template->render('view')代码>
读取word的代码“word”我可以看到它的作用,$this->vars[$index]=$value
,从vars[]
数组中获取索引并使其等于$value
。因此,如果我们这样做了:
__set(1, 'firstname');
// So now
$vars[1] = 'firstname';
__get(1); // Returns 'firstname'
如果我错了,请纠正我
我隐约看到了它的好处以及它的用处,但我还不能把握更大的图景。我无法将它与其他组件联系起来,而且它似乎是一个很大的部分
我不知道它的用途是什么。\uuuu get()
和\uu set()
就是这样的。它们的好处是,您不必调用它们,它们将由PHP解释器本身调用。如果试图访问对象的不可访问属性,则会发生这种情况。这就是所谓的
试试这个:
class Test {
private $foo;
public function __set($name, $value) {
echo "assgning $name => $value";
}
}
$t = new Test();
$t->foo = 'bar';
这更像是一个设计讨论,而不是更简洁的代码调试。所以