【问题标题】:How to use ternary operator instead of if-else in PHP如何在 PHP 中使用三元运算符而不是 if-else
【发布时间】:2011-02-11 21:41:04
【问题描述】:

我正在尝试使用三元运算符来缩短我的代码。

这是我的原始代码:

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 部分”。

【问题讨论】:

标签: php ternary-operator


【解决方案1】:

这称为三元运算符 ;-)

你可以使用其中的两个:

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

这可以读作:

  • 如果$type'recent'
  • 然后使用'sid DESC'
  • 其他
    • 如果$type'pop'
    • 然后使用'counter DESC'
    • 否则使用'RAND()'


几点注意事项:

  • 您必须使用 ===== ;而不是=
  • 最好使用(),这样更容易阅读
    • 而且你不应该使用太多这样的三元运算符:我认为这会使代码有点难以理解


并且,作为关于三元运算符的参考,引用 Operators section of the PHP manual

第三组是三元组 运营商:?:
应该使用 在两个表达式之间进行选择 取决于第三个,而不是 选择两个句子或路径 执行。
周边三元 带括号的表达式是一个非常 好主意。

【讨论】:

    【解决方案2】:

    我建议改用 case 语句。当您想要添加额外选项时,它使其更具可读性但更易于维护

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

    【讨论】:

    • 问题是关于三元运算符,但我同意,在这种情况下,switch 更有意义。
    • 嗯,问题是“缩短或更好” - 更少的行并不总是 == 更好;我喜欢三元运算符,但有时它们只是不适合使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2021-07-03
    • 2014-06-16
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多