Zend_Registry - Вам нужен getInstance ()? - PullRequest
2 голосов
/ 23 апреля 2010

Привет, мне интересно, когда я получаю доступ к Zend_Registry в приложении, нужно ли включать getInstance () и если да, то почему?

например

    Zend_Registry::getInstance()->get('db');

против

    Zend_Registry::get('db');

они оба, кажется, работают с последним, будучи менее многословным. Я смутно понимаю, что Zend_Registry - это синглтон, что, я думаю, означает, что может быть только один его экземпляр? так зачем вам нужен getInstance ()?

Ответы [ 4 ]

6 голосов
/ 23 апреля 2010

Я написал код для Zend_Registry в 2007 году.

Вы можете использовать статические get() и set(), и это влияет на экземпляр реестра по умолчанию, который хранится как статический член класса. Это предназначенное использование для большинства ситуаций.

Все остальные методы Zend_Registry в значительной степени поддерживают нестандартные ситуации, например, если вы хотите реализовать свой собственный класс для своего реестра, но при этом сделать его стандартным по умолчанию. Или, если вы хотите получить действительный объект реестра, например, чтобы можно было сериализовать весь объект реестра со всем его содержимым.

2 голосов
/ 23 апреля 2010

Вы не должны использовать 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);
    }

Это экземпляр для вас в статических методах.

0 голосов
/ 23 апреля 2010

Возможно, вы захотите использовать Zend_Registry :: getInstance (), если вы хотите получить доступ к ряду вызовов в реестре;вместо того чтобы выполнять вызовы метода offsetExists () и последующие вызовы array_key_exists () для каждого свойства, вы получаете экземпляр и затем используете методы ArrayObject для получения сохраненных записей.

Другая причинаиспользовать Zend_Registry :: getInstance (), если вы храните реестр в кэше.

Кроме этого, вы можете обнаружить, что Zend_Registry :: get () - все, что вам нужно.

0 голосов
/ 23 апреля 2010

Нет, вам не нужно , чтобы использовать getInstance(). Я полагаю, что он существует для других областей API. При создании синглетонов также часто используется метод getInstance(), который используется для получения экземпляра этого синглтона. Итак, определено придерживаться этого паттерна.

...