Как уменьшить количество операторов if-else в PHP?

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

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

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

6 ответов


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


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

пример:

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 условия, называемые Карно mapping.

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

Вы можете узнать больше об этом из Вики здесь.


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


полиморфизм также может избавиться от нескольких, хотя сложнее реализовать, чтобы уменьшить 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, Создание подпрограмм/функций.