3

我无法弄清楚的简写 if 语句有点麻烦

($product == "vindo") ? $this->getNextVindoInList($id) : $this->getNextGandrupInList($id),

这工作正常,但我想在该语句中再次检查。像这样:

if($product == "vindo") {
  if($number != 14) {
    $this->getNextVindoInList($id)
  }
} else {
 if($number != 22) {
    $this->getNextGandrupInList($id)
 }
}
4

4 回答 4

13

出于教育目的,我将保持此答案不变。但应该知道这是不推荐的。嵌套三元组是个坏主意。与显式 if-else 语句相比,它没有提供任何性能优势,并且使代码更难阅读。

也就是说,请参阅下文,了解它是如何做到的应该这样做。


两种方式:

($product == "vindo" && $number != 14 ? $this->getNextVindoInList($id) : ($number != 22 ? $this->getNextGandrupInList($id) : '')

// Equivalent of:
if ($product == "vindo" && $number != 14)
    $this->getNextVindoInList($id);
else if ($number != 22)
    $this->getNextGandrupInList($id);

// OR

// Equivalent of your example:
($product == "vindo" ? ($number != 14 ? $this->getNextVindoInList($id) : '') : ($number != 22 ? $this->getNextGandrupInList($id) : ''))
于 2012-09-20T12:40:14.750 回答
3

尝试这个!

($product == "vindo") ? ($number != 14 ? $this->getNextVindoInList($id) : null ) : (($number != 22) ? $this->getNextGandrupInList($id) : null)
于 2012-09-20T12:38:17.863 回答
2

我不会介绍带有嵌套三元运算符的解决方案。为什么?具有显式 if/else 结构的代码传达意图。它显示了到底发生了什么。

为什么要牺牲几行代码的可读性?这是一个相当糟糕的交易。

于 2012-09-20T12:51:59.950 回答
1

使用以下代码可以简化您的 if 语句:

if($product == "vindo" && $number != 14) {
  $this->getNextVindoInList($id)
} else if($number != 22) {
  $this->getNextGandrupInList($id)
}

分类 if 现在不方便,因为 else 也有一个 if 语句。

于 2012-09-20T12:47:00.737 回答