Просмотр поста

.
L!MP
SlyDeath (23.12.2011/03:49)
L!MP, А почему с паттерном Регистри есть проблема отложенной инициализации?
Проблема не в самом Registry, он и не должен ничего делать, кроме как хранить и обеспечивать доступ к данным.
Просто она (отложенная инициализация) несколько усложнена.
Нагляднее, на примере использования Registry и того же ServiceLocator`a:

class Locator
{
    private $request;
    /**
     * Возвращает объект Request
     *
     * @return object
     */

    public function getRequest()
    {
        if (empty($this->request)) {
            $this->request = new httpRequest();
        }

        return $this->request;
    }
}

// Код с Registry
// тут нам может и нафиг не нужен \httpRequest но мы должны загнать его в реестр, и если инициализация \httpRequest связана с какими-то обьёмными вычисленниями, то lazy initialization возлагается на сам класс.

\Registry::instance()->add('httpRequest', new \httpRequest);
\Registry::instance()->get('httpRequest')->getIp();

//Код с ServiceLocator
//ServiceLocator сам обеспечивает lazy initialization, инициализируя \httpRequest при первом же обращении к нему.

\Locator::instance()->getRequest()->getIp();