使用多个 returns 重构 IF 语句

refactor IF statement with multiple returns

我有一个类似这样的代码:

if($a) {
  return $a;
} elseif($b) {
  return $b;
} elseif($c) {
  return $c;
} else {
  return $d;
} 

老实说,它看起来不太好,但我需要检查变量以遵守某种优先顺序。我在想有没有更好的写法?

您可以使用 Null Coalescing Operator:

return $a ?? $b ?? $c ?? $d;

请注意,PHP 7.0 版以下不支持此运算符。

正如 berend 在评论中指出的那样,这与您问题中的代码略有不同。如果 $aFALSE 那么它被定义并且将被返回。如果那不是你想要的,你可以回到 Ternary Operator:

return isset($a) ? $a : (isset($b) ? $b : (isset($c) ? $c : $d));

但在大多数情况下,Null 合并运算符都可以。

您可以使用条件为 TRUEswitch / case

示例:

switch (TRUE) {

  case (isset($a)) : return $a; break;
  case (isset($b)) : return $b; break;
  case (isset($c)) : return $c; break;

  default : return $d;

}

进一步阅读: