netstuff
Новичок
Нужна помощь в осознании Registry-паттерна (работа с модулями)
Добрый вечер.
Предпосылкой к изучению такого понятия как паттерны стал совет старших товарищей.
С паттерном Singleton вроде разобрался. Если я правильно понял, он применяется в случае постоянного обращения к уникальному объекту.
В моем случае, необходимо реализовать возможность доступа к различным модулям (классам) без использования global. Как я понимаю, паттерн "Реестр", подходит для этого наилучшим образом, так как, в отличии от "Одиночки" хранит список объектов?
Долго изучал этот мануал. Настолько долго, что в какой-то момент времени появилась иллюзия, что я понял. Это была иллюзия =(
Если кто-то изнывает от желания безвозмездно помочь, напишите подробнее, пожалуйста, как работает этот паттерн?
Если же Вы Фанат или HraKK (благодаря которому я и развиваю эту тему), то объясните мне хотя бы, вот это:
конкретно не понимаю назначение двух последних методов...
Всем огромное спасибо. Это был тест на терпеливость =))))
Добрый вечер.
Предпосылкой к изучению такого понятия как паттерны стал совет старших товарищей.
С паттерном Singleton вроде разобрался. Если я правильно понял, он применяется в случае постоянного обращения к уникальному объекту.
В моем случае, необходимо реализовать возможность доступа к различным модулям (классам) без использования global. Как я понимаю, паттерн "Реестр", подходит для этого наилучшим образом, так как, в отличии от "Одиночки" хранит список объектов?
Долго изучал этот мануал. Настолько долго, что в какой-то момент времени появилась иллюзия, что я понял. Это была иллюзия =(
Если кто-то изнывает от желания безвозмездно помочь, напишите подробнее, пожалуйста, как работает этот паттерн?
Если же Вы Фанат или HraKK (благодаря которому я и развиваю эту тему), то объясните мне хотя бы, вот это:
PHP:
class Registry {
var $_cache_stack;
function Registry() {
$this->_cache_stack = array(array());
}
function setEntry($key, &$item) {
$this->_cache_stack[0][$key] = &$item;
}
function &getEntry($key) {
return $this->_cache_stack[0][$key];
}
function isEntry($key) {
return ($this->getEntry($key) !== null);
}
function &instance() {
static $registry = false;
if (!$registry) {
$registry = new Registry();
}
return $registry;
}
function save() {
array_unshift($this->_cache_stack, array());
if (!count($this->_cache_stack)) {
trigger_error('Registry lost');
}
}
function restore() {
array_shift($this->_cache_stack);
}
}
Всем огромное спасибо. Это был тест на терпеливость =))))