Как воспользоваться сервис-провайдером или фасадом с передачей параметра?
Мне нужно получить нужный экземпляр класса по передаваемому параметру. Но текущая реализация мне кажется громоздкой и какой-то неправильной. Можно ли это сделать как-то короче через сервис-провайдер либо фасад?
Приведу пример текущей реализации:
<?php
namespace App\Core\Domain\Constants;
use App\Core\Domain\NotificationSending\Sms\Providers\GmsViberSms;
use App\Core\Domain\NotificationSending\Sms\Providers\SerwerSms\SerwerSmsProvider;
class OrderChatMessageType
{
public const VIBER = 1;
public const SERWERSMS = 2;
public const PROVIDERS = [
self::VIBER => GmsViberSms::class,
self::SERWERSMS => SerwerSmsProvider::class
];
// Достаем нужный класс
private static function get_class_provider(int $service_type): ?string
{
return self::PROVIDERS[$service_type] ?? null;
}
// Достаем экземпляр класса
public static function get_provider(int $service_type)
{
return resolve(self::get_class_provider($service_type));
}
}
И собственно получение экзепляра:
$service_provider = OrderChatMessageType::get_provider($service_type);
(Каждый из этих провайдеров имплеменрирует единый интерфейс)