#php #шаблоны_проектирования
В интернете полно примеров данного класса. Но нигде не пишется, а где хранить данные эти. Ведь после перезагрузки страницы все данные, что мы сохранили в некую внутреннюю переменную - пропадут. Эти люди что-то знают, но не говорят? Или этот шаблон нужно каким-либо образом использовать совместно с хранилищем memcached? Или хранилище memcached как раз и реализует данный паттерн и нужно просто его использовать? Единственное предназначение паттерна для кэширования или как-то где-то можно его еще использовать? Как (если, как я написал выше - после перезагрузки данные стираются)?
Ответы
Ответ 1
Шаблон проектирования Реестр используется не для кэширования, а, в основном, для замены глобальных переменных, ибо глобальные переменные это не очень хорошо. Реестр class Registry { /** * данные реестра */ protected static $data = array(); /** * Добавляет значение в реестр * */ public static function set($key, $value) { self::$data[$key] = $value; } /** * Возвращает значение из реестра по ключу */ public static function get($key) { if(isset(self::$data[$key])) { return self::$data[$key]; } return null; } /** * Удаляет значение из реестра по ключу * */ public static function removeVar($key) { if(isset(self::$data[$key])) { unset(self::$data[$key]); } } } Но, в отличие от глобальных переменных, благодаря использованию этого паттерна, вы можете добавить какие-нибудь дополнительные "фишки", например блокирование переменной от изменения. Расширям возможности /** * Добавим массив с для идентификации залоченных переменых */ protected static $locked = array(); /** * Поменяем метод set из примера выше */ static public function set($key, $value) { if ( !self::hasLock($key) ) { self::$data[$key] = $value; } else { throw new Exception("переменная '$key' заблокирована для изменений"); } } /** * напишем "обвес" для блокировки/разблокировки */ static public function lock($key) { self::$lock[$key] = true; } static public function hasLock($key) { return isset(self::$lock[$key]); } static public function unlock($key) { if ( self::hasLock($key) ) { unset(self::$lock[$key]); } } И если Вам нужно хранить данные из Реестра где-нибудь, то вы запросто можете записать их куда угодно.
Комментариев нет:
Отправить комментарий