Страницы

Поиск по вопросам

четверг, 26 декабря 2019 г.

Как использовать/применять шаблон проектирования Реестр? Где хранить данные?

#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]); } } И если Вам нужно хранить данные из Реестра где-нибудь, то вы запросто можете записать их куда угодно.

Комментариев нет:

Отправить комментарий