Как можно избавиться от большого свитча в PHP применяя ООП?
подскажите пожалуйста как в PHP в объектно-ориентированном программировании можно избавиться от такого большого свитча?
private function getImportService(string $distributorName)
{
switch ($distributorName) {
case 'Дистрибьютор 1':
return new ImportDistributor1Service();
case 'Дистрибьютор 2':
return new ImportDistributor2Service();
case 'Дистрибьютор 3':
return new ImportDistributor3Service();
case 'Дистрибьютор 4':
return new ImportDistributor4Service();
case 'Дистрибьютор 5':
return new ImportDistributor5Service();
case 'Дистрибьютор 6':
return new ImportDistributor6Service();
case 'Дистрибьютор 7':
return new ImportDistributor7Service();
case 'Дистрибьютор 8':
return new ImportDistributor8Service();
case 'Дистрибьютор 9':
return new ImportDistributor9Service();
case 'Дистрибьютор 10':
return new ImportDistributor10Service();
case 'Дистрибьютор 11':
return new ImportDistributor11Service();
default:
throw new \Exception('Not found service for select distributor');
}
}
у всех сервисов будет один метод который будет называться одинаково, но реализовываться по разному
class ImportDistributor1Service
{
public function prepare(string $dataPreparation)
{
}
}
Ответы (1 шт):
Автор решения: webDev_
→ Ссылка
private function getImportService(string $distributorName)
{
$int = explode(" ", $distributorName)[1];
$class = "ImportDistributor".$int."Service";
if (class_exists($class)) {
return new $class();
}else{
throw new Exception('Not found service for select distributor');
}
}