Сайт вебмастера

Шаблон Registry (Реестр)

16-07-2019Reading time ~ 1 min.PHP/ООП 7600

Шаблон Registry предназначен в первую очередь на решение проблемы глобальной области видимости. Это очень частая задача, когда нужно обеспечить общий доступ к данным, но при этом не желательно засорять глобальную область видимости. С помощью Registry, как раз и можно это сделать.

Следует отметить, что этот паттерн имеет множество реализаций. Я покажу свой вариант, основанный на использовании Multiton. Смысл в том, что Registry может хранить разные данные и для того, чтобы гарантировать единый доступ, следует использовать Singleton. Но, с практической точки зрения, данные в Registry могут иметь разные типы/группировку. Например конфигурация приложения может содержать параметры доступа к MySQL, Sqlite, ключ шифрования, параметры роутинга и т.п. Именно с помощью Мультитона мы можем указать «группу» настроек, чтобы они не смешивались между собой: general, database, route и т.п.

Обычно шаблон Registry используется через set/get-методы. Код с примерами вы найдете на гитхабе.

Работать с Registry нужно как с обычным мультитоном. Вначале получается экземпляр класса, дальше вызывается нужный метод.

// добавить
$rd = Registry::getInstance('sqlite');
$rd->set('dsn', 'sqlite:storage/users.sqlite');
 
// получить
$rd = Registry::getInstance('sqlite');
$dsn = $rd->get('dsn');

Поскольку данные хранятся в php-массиве, то они могут быть любыми типами (числа, строки, массивы, объекты и т.п.).

Related Posts