Как использовать тернарный оператор вместо if-else в PHP - PullRequest
6 голосов
/ 24 апреля 2010

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

Это мой оригинальный код:

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

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

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

Это код, который я пробовал, но не знаю, как добавить к нему «elseif деталь».

Ответы [ 2 ]

14 голосов
/ 24 апреля 2010

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

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

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

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

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


Пара заметок:

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


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

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

3 голосов
/ 24 апреля 2010

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

switch ($type)
{
case "recent":
  $OrderType =  "sid DESC"; 
  break;
case "pop":
  $OrderType =  "counter DESC"; 
  break;
default:
   $OrderType =  "RAND()"; 
} 
...