Шаблон 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-массиве, то они могут быть любыми типами (числа, строки, массивы, объекты и т.п.).