嘿,我想知道在应用程序中访问Zend_Registry时是否需要包含getInstance(),如果需要,为什么?
例如
Zend_Registry::getInstance()->get('db');
VS
Zend_Registry::get('db');
他们似乎都在使用后者,而不是那么冗长。
我模糊地理解Zend_Registry是一个单例,我认为这意味着它只能有一个实例?那你为什么需要getInstance()?
答案 0 :(得分:6)
我在2007年为Zend_Registry编写了代码。
您可以使用静态get()
和set()
,它会影响注册表的默认实例,存储为类的静态成员。这是大多数情况下的预期用途。
Zend_Registry的所有其他方法几乎都支持非典型情况,例如,如果您想为注册表实现自己的类,但仍然使其成为默认的单例。或者,如果您想获取实际的注册表对象,例如,您可以使用其所有内容序列化整个注册表对象。
答案 1 :(得分:2)
您不得使用getInstance()
。
如果您查看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);
}
它在静态方法中为您提供实例。
答案 2 :(得分:0)
不,您需要才能使用getInstance()
。我相信,它存在于API的其他领域。在创建单例以暴露用于获取该单例实例的getInstance()
方法时,这也是一种常见模式。因此,它被定义为坚持这种模式。
答案 3 :(得分:0)
如果要访问注册表的多个调用,可能需要使用Zend_Registry :: getInstance();而不是通过调用offsetExists()方法以及对每个属性的array_key_exists()的后续调用,您获得一个实例,然后通过ArrayObject方法获取存储的条目。
您可能想要使用Zend_Registry :: getInstance()的另一个原因是您将注册表存储在缓存中。
除此之外,您可能会发现Zend_Registry :: get()就是您所需要的一切。