我一直在阅读MVC框架的工作原理和设计模式本身。我可以理解大部分内容,看看它们是如何组合在一起的,但在很多例子中我看到过这样的内容:
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');
。
阅读代码'字'换句话说,我可以看到它的作用$this->vars[$index] = $value
,从vars[]
数组中获取索引并使其等于$value
。所以,如果我们这样做了:
__set(1, 'firstname');
// So now
$vars[1] = 'firstname';
__get(1); // Returns 'firstname'
如果我在这里错了,请纠正我。
我隐约可以看到它的好处和有用之处,但我还无法把握更大的局面。我无法将其与其他组件联系起来,而且它似乎很重要。
我无法理解其目的是什么。
答案 0 :(得分:1)
这更像是设计讨论而不是像代码调试那样简洁。所以..
答案 1 :(得分:0)
__get()
和__set()
被称为magic methods。它们的好处是,您不必调用它们,它们将由PHP解释器本身调用。如果您尝试访问对象的不可访问属性,则会发生这种情况。这称为property overloading。
试试这个:
class Test {
private $foo;
public function __set($name, $value) {
echo "assgning $name => $value";
}
}
$t = new Test();
$t->foo = 'bar';