@unfapable

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

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

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

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

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


Примерно так у меня, пример упрощен, но думаю суть понятна. Ясно, что такой код тяжело сопровождать и вообще это плохо так делать?, да ещё этих type'ов может быть не три, а тридцать, например, и что, тогда каждый раз писать условие, которое создает объект? Какие в подобных ситуаций можно применить методы/способы/паттерны, чтобы без боли можно было смотреть на такой код и его было легко поддерживать, как вообще поступают?
Если можно, с примерами, пожалуйста, хочется разобраться в этом вопросе.
  • Вопрос задан
  • 411 просмотров
Пригласить эксперта
Ответы на вопрос 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();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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