Правильно ли использовать несколько «операторов IF»? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть дизайн страницы с двумя столбцами в WordPress.

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

Мой вопрос таков: мой подход - «правильный метод»?У меня есть 3 набора массивов в «IF Statement»

Я должен добавить, что он работает!

Но - я хочу убедиться, что это сделано правильно:

function my_custom_sidebar_display( $sidebar ) {
    // Return a different sidebar for different categories
    if ( in_category(array('Apples','Pears','Peaches')) ) {
        return 'sidebar-fruit';
    }
    if ( in_category(array('potatoes','carrots','celery')) ) {
        return 'sidebar-vegetables';
    }
  }
    if ( in_category(array('monkeys','rhino','cheetah')) ) {
        return 'sidebar-animals';
    }
    // Return theme defined sidebar area
    else {
        return $sidebar;
    }
}
add_filter( 'ocean_get_sidebar', 'my_custom_sidebar_display' );

1 Ответ

0 голосов
/ 26 сентября 2018

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

Ваша функция изменится на что-то вроде этого:

function my_custom_sidebar_display( $sidebar ) {
    // Return a different sidebar for different categories
    if ( in_category(array('Apples','Pears','Peaches')) ) {
        return 'sidebar-fruit';
    } else if ( in_category(array('potatoes','carrots','celery')) ) {
        return 'sidebar-vegetables';
    } else if ( in_category(array('monkeys','rhino','cheetah')) ) {
        return 'sidebar-animals';
    } else { // Return theme defined sidebar area
        return $sidebar;
    }
}

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

if ($letter === 'a') { $value = "1";}
if ($letter === 'b') { $value = "2";}
if ($letter === 'c') { $value = "3"; }
return $value;

Таким образом, будут проверены все 3 условия, даже еслиВы знаете, что только один из них может быть правдой.(Это просто иллюстрация, я также думаю, что можно просто сразу же вернуться вместо заполнения другой переменной)

...