2

有人可以解释为什么在 MVC 框架中需要一个注册表类吗?

是加载库吗?创建注册表背后的总体思路是什么?登记处应处理哪些数据?

4

2 回答 2

2

直接来自http://www.phppatterns.com/docs/design/the_registry

Registry 提供了一种以管理良好的方式在全球存储数据的机制,有助于防止全球崩溃。

基本上,这意味着注册表是一个在全局范围内存储您需要的变量/对象的地方,而不会污染应用程序的全局命名空间。它与 MVC 本身无关,但许多 MVC 框架也使用注册表模式。

它允许您将变量存储在一个地方并在另一个地方检索它,而无需求助于各种复杂的例程或魔法来检索您的变量。

以 Zend Framework 为例,您创建一个 Zend_Navigation 对象并将其存储在引导时的Zend_Registry中。然后稍后您可以轻松地从其中一个控制器或其他类的注册表中检索它。

于 2012-04-11T07:17:17.923 回答
0

Registry 类更像是数据持有者对象加载器等等。您可以将数据添加到控制器中的注册表并从视图中获取。一个小例子。

  Class Registry
    {
         protected $data = array();
         private $loadClasses;

         public function getData($name){

            return isset($this->data[$name])?$this->data[$name]:null;
         }
         public function setData($name,$value)
         {
            $this->data[$name] = $value;
         }
         public function addData($name,$value)
         {
             $this->data[$name][] = $value;
         }


         public function &singletonLoad($class) 
         {
            if(isset($this->loadClasses[$class])) 
            {
               return $this->loadClasses[$class] ;  
            }
            if(class_exists($class)) 
            {
                return $this->loadClasses[$class] = new $class();
            }else 
            {
                return false;
            }
         }



    }


    class AController  extends Controller
    {
        public function indexAction() 
        {
            $this->registsry->setData('name','John')  ;
        }

    }


     class AView  extends View
    {
        public function getName() 
        {
            return  $this->registsry->getData('name') ;
        }

    }
于 2012-04-11T07:29:45.313 回答