Компонент-контейнер для работы с экземплярами классов-служб. Реализует логику контейнера служб по шаблону проектирования "Локатор служб".
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/
Метод | Аргументы | Возвращаемые данные | Исключения | Описание |
---|---|---|---|---|
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 Экземпляр класса-службы | Добавляет экземпляр класс-службу |
Вы можете связаться со мной в социальной сети ВКонтакте: ВКонтакте: Максим Епихин
Если удобно писать на почту, то можете воспользоваться этим адресом: [email protected]
Мой канал на YouTube, который посвящен разработке веб и игровых проектов: YouTube: Максим Епихин
Поддержать меня можно переводом на Яндекс.Деньги: Денежный перевод