Как уменьшить количество операторов if-else в PHP? - PullRequest
7 голосов
/ 26 ноября 2009

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

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

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

Ответы [ 6 ]

20 голосов
/ 26 ноября 2009

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

Пример:

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;
}
18 голосов
/ 26 ноября 2009

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

9 голосов
/ 30 сентября 2011

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

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

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

3 голосов
/ 26 ноября 2009

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

1 голос
/ 01 октября 2011

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

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

# 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, создайте подпрограммы / функции.

1 голос
/ 26 ноября 2009
Полиморфизм

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

...