什么是注册表类的目的?

时间:2012-04-11 07:15:12

标签: php model-view-controller

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

是否要加载库?什么是创建注册表背后的一般想法?注册管理机构应该处理哪些数据?

2 个答案:

答案 0 :(得分:2)

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

  

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

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

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

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

答案 1 :(得分:0)

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

  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') ;
        }

    }