SlyDeath (23.12.2011/03:49)Проблема не в самом Registry, он и не должен ничего делать, кроме как хранить и обеспечивать доступ к данным.
L!MP, А почему с паттерном Регистри есть проблема отложенной инициализации?
Просто она (отложенная инициализация) несколько усложнена.
Нагляднее, на примере использования 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();