Zend framework Zend_注册表-需要getInstance()吗?
嘿,我想知道在应用程序中访问Zend_注册表时是否需要包含getInstance(),如果需要,为什么 比如说Zend framework Zend_注册表-需要getInstance()吗?,zend-framework,singleton,registry,Zend Framework,Singleton,Registry,嘿,我想知道在应用程序中访问Zend_注册表时是否需要包含getInstance(),如果需要,为什么 比如说 Zend_Registry::getInstance()->get('db'); vs 他们两人似乎都在工作,而后者则不那么冗长。 我模糊地理解Zend_注册表是一个单例,我想这意味着它只能有一个实例?那么为什么需要getInstance() 不,您不需要使用getInstance()。我相信,API的其他领域也会用到它。在创建singleton以公开用于获取该singleto
Zend_Registry::getInstance()->get('db');
vs
他们两人似乎都在工作,而后者则不那么冗长。
我模糊地理解Zend_注册表是一个单例,我想这意味着它只能有一个实例?那么为什么需要getInstance() 不,您不需要使用
getInstance()
。我相信,API的其他领域也会用到它。在创建singleton以公开用于获取该singleton实例的getInstance()
方法时,这也是一种常见的模式。因此,它被定义为遵循该模式。您不必使用getInstance()
。
如果您查看Zend_注册表
类,您将看到:
public static function get($index)
{
$instance = self::getInstance();
if (!$instance->offsetExists($index)) {
require_once 'Zend/Exception.php';
throw new Zend_Exception("No entry is registered for key '$index'");
}
return $instance->offsetGet($index);
}
它在静态方法中为您获取实例。如果您希望访问大量对注册表的调用,您可能希望使用Zend_Registry::getInstance();对于每个属性,不需要执行对offsetExists()方法的调用和对array_key_exists()的后续调用,而是获取一个实例,然后通过ArrayObject方法获取存储的条目 您可能希望使用Zend_Registry::getInstance()的另一个原因是将注册表存储在缓存中
除此之外,您可能会发现Zend_Registry::get()是您所需要的一切。我在2007年为Zend_Registry编写了代码 您可以使用静态的
get()
和set()
,它会影响作为类的静态成员存储的注册表的默认实例。这是大多数情况下的预期用途
Zend_Registry的所有其他方法几乎都支持非典型情况,例如,如果您想为注册表实现自己的类,但仍然将其作为默认的单例。或者,如果您希望获取实际的注册表对象,例如,以便可以序列化整个注册表对象及其所有内容
public static function get($index)
{
$instance = self::getInstance();
if (!$instance->offsetExists($index)) {
require_once 'Zend/Exception.php';
throw new Zend_Exception("No entry is registered for key '$index'");
}
return $instance->offsetGet($index);
}