0

我一直在阅读 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'

如果我在这里错了,请纠正我。

我隐隐约约地看到了它的好处和有用性,但我还无法掌握更大的图景。我无法将它与其他组件联系起来,而且它似乎占了很大一部分。

我不知道它的目的是什么。

4

2 回答 2

1

这更像是一个设计讨论,而不是更简洁的代码调试。所以..

这告诉你为什么这是一个好主意

这告诉你为什么它不是

这会告诉您有关注册表 getter 和 setter 的信息

于 2013-04-23T17:37:32.473 回答
0

__get()并且__set()是所谓的魔术方法。它们的好处是,您不必调用它们,它们将由 PHP 解释器本身调用。如果您尝试访问对象的不可访问属性,就会发生这种情况。这称为属性重载

尝试这个:

class Test {

    private $foo;

    public function __set($name, $value) {
        echo "assgning $name => $value";
    }
}

$t = new Test();
$t->foo = 'bar';
于 2013-04-23T17:26:35.043 回答