【问题标题】:refactor IF statement with multiple returns重构具有多个返回的 IF 语句
【发布时间】:2020-11-11 20:43:46
【问题描述】:

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

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

说实话看起来不太好,但我需要检查变量以尊重某种优先顺序。我在猜测是否有更好的方法来写这个?

【问题讨论】:

    标签: php php-7


    【解决方案1】:

    您可以使用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 Coalescing Operator 会这样做。

    【讨论】:

    • 不确定这是desired outcome,如果$a === false返回$a,还是测试不正确?
    • @berend 啊,看看你的例子。这确实很有趣,也很有意义。这与问题中的代码确实不同。
    • 怎么样:$a ?: $b ?: $c ?: $d,很短,works
    • @berend:不,当我使用它时会收到Undefined variable: a 警告。
    【解决方案2】:

    您可以使用switch / case,条件为TRUE

    示例:

    switch (TRUE) {
    
      case (isset($a)) : return $a; break;
      case (isset($b)) : return $b; break;
      case (isset($c)) : return $c; break;
    
      default : return $d;
    
    }
    

    进一步阅读:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2022-11-01
      • 2015-11-22
      相关资源
      最近更新 更多