Я обнаружил, что есть много операторов if-else, особенно вложенных if else, эти инструкции делают мой код менее удобочитаемым. Как уменьшить число операторов if else в PHP?
Мои советы таковы: 1. Используйте оператор switch, когда он подходит; 2.use 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
которые охватывают все необходимые случаи.
Вы можете узнать больше об этом из wiki.
Используйте тернарный оператор, реорганизуйте свой код, напишите функцию или класс, который выполняет все необходимые инструкции if else.
полиморфизм может также избавиться от некоторых, все труднее реализовать, чтобы уменьшить if / else в PHP, поскольку он не безопасен для типа …
Я работаю над большим количеством кода, который полон постоянно развивающейся бизнес-логики и нуждается в изменении через день. Два совета, которые, безусловно, помогли мне не отставать от изменений: избегайте всех остальных заявлений и возвращайтесь / выходите как можно скорее. Никогда не входите в глубокое гнездование -> создавайте подпрограммы / функции.
Замена всех остальных выражений с помощью отрицательных операторов делает ваш код намного более легким для чтения сверху вниз (близость condtion и блока кода):
# 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 }
Во-вторых, верните / выйдите как можно скорее. Мое мнение, конечно, но я не вижу смысла в выполнении каких-либо дополнительных условий / тестов, когда вы уже определили результат подпрограммы, особенно если вы хотите прочитать код сверху вниз. Удаление всей двусмысленности делает вещи проще.
В заключение я хотел бы избегать использования других, особенно в длинных списках BL. Вернитесь, как только вы узнаете результат. Если уровень вложенности больше 2, создайте подпрограммы / функции.