mepihindeveloper / php-service-locator
Компонент-контейнер для работы с экземплярами классов-служб
Requires
- php: >=7.4
- psr/container: ^1.1
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-asserts: ^1.0.0
- codeception/module-phpbrowser: ^1.0.0
This package is auto-updated.
Last update: 2025-03-29 01:17:30 UTC
README
Компонент-контейнер для работы с экземплярами классов-служб. Реализует логику контейнера служб по шаблону проектирования "Локатор служб".
Структура
src/
--- exceptions/
------ ContainerObjectInvalidTypeException.php
--- interfaces/
------ ServiceInterface.php
--- ServiceLocator.php
В директории interfaces
хранятся необходимые интерфейсы, которые необходимо имплементировать в при реализации
собственных классов служб. Класс ServiceLocator
выступает в качестве контейнера служб.
В директории exceptions
хранятся необходимые исключения. Исключение QueryStringNotFoundException
исключение необходимо для обозначения ошибки типа служб в контейнере.
Примерная реализация функционала:
<?php declare(strict_types = 1); use mepihindeveloper\components\container\interfaces\ServiceInterface; use mepihindeveloper\components\container\ServiceLocator; error_reporting(E_ALL); ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); require_once 'vendor/autoload.php'; $serviceLocator = new ServiceLocator(); // Анонимный класс используется в тестах, но можно реализовать собственный класс. $logger = new class implements ServiceInterface { protected string $filePath; public function __construct(string $filePath = '') { $this->filePath = $filePath; } /** * Получает путь к файлу * * @return string */ public function getFilePath(): string { return $this->filePath; } }; $serviceLocator->addInstance(get_class($logger), $logger); var_dump($serviceLocator->has(get_class($logger)), $serviceLocator->get(get_class($logger))); // OR $serviceLocator->addService(get_class($logger), ['/var/www/']); $logger = $this->serviceLocator->get(get_class($logger)); var_dump($logger->getFilePath()); // /var/www/
Доступные методы
ServiceLocator
Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
---|---|---|---|---|
get(string $id) | Идентификатор службы (класс объекта object::class) | ServiceInterface | ContainerObjectInvalidTypeException|NotFoundExceptionInterface | Получает службу из контейнера |
has(string $id): bool | Идентификатор службы (класс объекта object::class) | bool | Проверяет наличие службы в контейнере | |
addService(string $id, array $params): void | string $id Идентификатор класса-службы (object::class); array $params Аргументы конструктора класса-службы | Добавляет класс-службу | ||
addInstance(string $id, ServiceInterface $service): void | string $id Идентификатор класса-службы (object::class); ServiceInterface $service Экземпляр класса-службы | Добавляет экземпляр класс-службу |
Контакты
Вы можете связаться со мной в социальной сети ВКонтакте: ВКонтакте: Максим Епихин
Если удобно писать на почту, то можете воспользоваться этим адресом: mepihindeveloper@gmail.com
Мой канал на YouTube, который посвящен разработке веб и игровых проектов: YouTube: Максим Епихин
Поддержать меня можно переводом на Яндекс.Деньги: Денежный перевод