Как использовать тернарный оператор вместо если еще в PHP

Я пытаюсь сократить свой код с помощью тернарного оператора.

Это - мой исходный код:

if ($type = "recent") {
    $OrderType = "sid DESC";
} elseif ($type = "pop") {
    $OrderType = "counter DESC";
} else {
    $OrderType = "RAND()";
}

Как я могу использовать тернарный оператор в своем коде вместо ifs/elses?

$OrderType = ($type = "recent") ? "sid DESC" : "counter DESC" ;

Это - код, который я попробовал, но понятия не имейте, как добавить “elseif часть” к нему.

6
задан Lypyrhythm 24 November 2017 в 21:40
поделиться

2 ответа

Это называется тернарным оператором ; -)

Вы можете использовать два из них:

$OrderType = ($type == 'recent' ? 'sid DESC' : ($type == 'pop' ? 'counter DESC' : 'RAND()'))

Это можно прочитать как:

  • если $ type является 'недавним'
  • , тогда используйте 'sid DESC'
  • else
    • если $ type равно 'pop'
    • , тогда используйте 'counter DESC'
    • иначе используйте 'RAND ()'


Пара примечаний:

  • Вы должны использовать == или === ; а не =
  • Лучше всего использовать () , чтобы вещи легче читать
    • И вам не следует использовать слишком много таких тернарных операторов: это затрудняет понимание кода, я думаю


И в качестве справки о тернарный оператор, цитируемый из раздела Операторы руководства PHP :

Третья группа - это тернарный оператор : ?: .
Его следует использовать для выбора между двумя выражениями в зависимости от третьего, а не для выбора двух предложений или путей выполнения .
Заключение троичных выражений в круглые скобки - очень хорошая идея.

14
ответ дан 8 December 2019 в 13:45
поделиться

Я бы предложил вместо этого использовать оператор case. это делает его немного более читаемым, но более удобным в обслуживании, когда вы хотите добавить дополнительные параметры

switch ($type)
{
case "recent":
  $OrderType =  "sid DESC"; 
  break;
case "pop":
  $OrderType =  "counter DESC"; 
  break;
default:
   $OrderType =  "RAND()"; 
} 
3
ответ дан 8 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: