Задать вопрос
@unfapable

Как отрефакторить такой код?

Добрый день, есть код с множеством условий, что-то типа такого:
$type = 'a'; // название действия

if ($type == 'a') {
    return new A();
}

if ($type == 'b') {
    return new B();
}

if ($type == 'c') {
    return new C();
}


Примерно так у меня, пример упрощен, но думаю суть понятна. Ясно, что такой код тяжело сопровождать и вообще это плохо так делать?, да ещё этих type'ов может быть не три, а тридцать, например, и что, тогда каждый раз писать условие, которое создает объект? Какие в подобных ситуаций можно применить методы/способы/паттерны, чтобы без боли можно было смотреть на такой код и его было легко поддерживать, как вообще поступают?
Если можно, с примерами, пожалуйста, хочется разобраться в этом вопросе.
  • Вопрос задан
  • 413 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Как вариант так, ясное дело что классы A,B,C приведены для примера, но думаю в целом суть понятна
$type = 'a';
$class_name= strtoupper($type);
if(in_array($class_name,['A', 'B', 'C'])){
return new $class_name;
}
Ответ написан
Комментировать
muhammad_97
@muhammad_97
PHP-разработчик
Если название класса равно названию типа, то как-то так:

$className = strtoupper($type);

return new $className();


Если нет, то можно создать массив ассоциаций:

$associations = [
    'a' => 'Foo',
    'b' => 'Bar',
    'c' => 'Baz',
];

$className = $associations[$type];

return new $className();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы