Тройные операторы PHP Elseif - программирование

Тройные операторы PHP Elseif

Я пытаюсь преобразовать следующий код в Тернарный оператор, но он не работает, и я не уверен, почему. Я думаю, что моя проблема в том, что я не знаю, как выразить операцию elseif в трехмерном формате. По моему пониманию и elseif выполняется так же, как операция if, используя формат : (condition) ? 'result'.

if ($i == 0) {
    $top = '<div class="active item">';
} elseif ($i % 5 == 0) {
    $top = '<div class="item">';
} else {
    $top = '';
}

$top = ($i == 0) ? '<div class="active item">' : ($i % 5 == 0) ? '<div class="item">' : '';
4b9b3361

Ответ 1

$top = ($i == 0) ? '<div class="active item">' : (($i % 5 == 0) ? '<div class="item">' : '');

вам нужно добавить скобки вокруг всего блока

Ответ 2

Тернарный оператор не поддерживает истинную операцию if... else if... else...; однако вы можете имитировать поведение, используя следующую технику

var name = (variable === 1) ? 'foo' : ((variable === 2) ? 'bar' : 'baz');

Мне лично это все равно, потому что я не считаю его более читабельным или элегантным. Обычно я предпочитаю оператор switch.

switch (variable) {
    case 1 : name = 'foo'; break;
    case 2 : name = 'bar'; break;
    default : name = 'bas'; break;
}

Ответ 3

Слишком поздно, возможно, поделиться некоторыми взглядами, но тем не менее:)

  • Используйте if - else if - else для ограниченного числа оценок. Лично я предпочитаю использовать if - else if - else, когда количество сравнений меньше 5.
  • Используйте коммутационный футляр, где количество оценок больше. Лично я предпочитаю switch-case, где случаи больше 5.
  • Используйте тройной вариант, где рассматривается одно сравнение (или одно сравнение при циклировании) или когда требуется сравнение if-else внутри предложения "case" структуры коммутатора.
  • Использование trernary быстрее при сравнении во время циклизации по очень большому набору данных.

ИМХО. Наконец, разработчик, который решает компромисс между понятием кода и производительностью, и который, в свою очередь, решает, что из трехъядерного или if else-if else vs. switch-case можно использовать в любой конкретной ситуации.