Как уменьшить количество операторов if-else в PHP?
-
05-07-2019 - |
Вопрос
Я обнаружил, что существует множество операторов 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, создайте подпрограммы / функции.