您觉得Zend_Registry有用吗?
应该将其用于哪些任务?哪个不适合?
变量的全局状态不是一个好习惯。
主要对象可以通过$front->setParam('paramName', $object)
注入(inject)全局状态,
那么Zend_Registry的目的是什么?
最佳答案
引用PoEAA on Registry Pattern:
我使用注册表的主要原因(当我使用它时)是因为它创建了易于访问的应用程序范围。有了注册表,我不必在整个全局范围内乱扔对象。只有注册管理机构本身是全局性的。从任何地方查找我扔到注册表中的任何内容,包括模型,都非常方便:
但是,就像Singletons一样,Registry经常会皱眉。这是一个article by Brandon Savage with some thought about why not to use the Registry。反对书记官处的主要论据是
那些反对注册表的人通常主张使用Dependency Injection,尽管应注意的是,一旦获得实例,您也可以注入(inject)regt。但是您没有Inversion of Control,因为using对象将从注册表中提取所需的内容。但是,将注册表用作服务定位器是一种有效的方法。
看到这个article by Martin Fowler about ServiceLocator vs. Dependency Injection。
就像您对问题的评论中指出的那样,
Zend_Registry
不是严格的Singleton。除了使用通过Zend_Registry::getInstance()
获得的全局实例之外,您还可以在需要时实例化多个实例。因此,对象可以拥有自己的注册表。但是,当以这种方式使用注册表时,它基本上只是一个荣耀的ArrayObject。最后说明:与所有设计模式一样,如果适用于您的问题,请使用它。
关于php - Zend_Registry : real life examples,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2531168/