Вопрос

Я обнаружил, что существует множество операторов if-else, особенно вложенных операторов if else. Эти операторы делают мой код менее читабельным.Как уменьшить количество операторов if else в PHP?

Мои советы заключаются в следующем:1. Используйте оператор switch, когда это удобно;2. используйте оператор exit(), когда это возможно;3.Используйте троичный оператор, когда это возможно;

Есть ли другие советы, которые могут уменьшить количество операторов if else, особенно вложенных операторов if-else?

Это было полезно?

Решение

Измените код на более мелкие рабочие единицы. Слишком много условной логики является запахом кода и обычно указывает на необходимость рефакторинга вашей функции.

Другие советы

По возможности старайтесь использовать «ранний возврат», чтобы уменьшить глубину вложенности.Попробуйте использовать оценку логического выражения.

Пример:

function foo($param)
{
    $ret = false;

    if(userIsLoggedIn()) {
        if(is_array($param)) {
            if($param['count'] > 0) {
                $ret = true;
            }
            else {
                $ret = false;
            }
        }        
    }

    return $ret;
}

Вы можете переписать это так:

function foo($param) 
{
    if(!userIsLoggedIn()) return false;
    if(!is_array($param)) return false;
    return $param['count'] > 0;
}

Существует официальный академический метод для рефакторинга и упрощения множества условий if , который называется отображение Карно .

Он принимает несколько условий тестирования и пытается помочь в создании упрощенных операторов if , которые охватывают все необходимые случаи.

Подробнее об этом можно узнать из вики здесь .

Используйте троичный оператор, реорганизуйте свой код, напишите функцию или класс, который выполняет все необходимые операторы if else.

полиморфизм также может избавить от некоторых, хотя его сложнее реализовать, чтобы уменьшить if / else в PHP, так как он не является безопасным для типа ...

Я работаю над большим количеством кода, который полон постоянно меняющейся бизнес-логики и нуждается в изменении через день. Два совета, которые, безусловно, помогли мне не отставать от изменений: избегайте всех остальных утверждений и возвращайтесь / выходите как можно скорее. Никогда не входите в глубокое вложение - > создавать подпрограммы / функции.

Замена всех других операторов на отрицательные, если операторы делают ваш код намного проще для чтения сверху вниз (близость условия и блока кода):

# business logic block
if ( $condition ) {
    # do something
    # code code code
} else {
    # code code code
    return;
}

# refactored:
if ( ! $contition ) {
    # code code code
    return;
}
if ( $condition ) {
    # code code code 
}

Во-вторых, возвращайтесь / выходите как можно скорее. Мое мнение, конечно, но я не вижу смысла проходить через какие-либо дополнительные условия / тесты, когда вы уже определили результат подпрограммы, особенно когда вы хотите прочитать код сверху вниз. Удаление всей двусмысленности делает вещи проще.

В заключение я хотел бы избежать использования else, особенно в длинных списках BL. Вернитесь, как только узнаете результат. Если уровень вложенности больше 2, создайте подпрограммы / функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top