使用多个 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 在评论中指出的那样,这与您问题中的代码略有不同。如果 $a
是 FALSE
那么它被定义并且将被返回。如果那不是你想要的,你可以回到 Ternary Operator:
return isset($a) ? $a : (isset($b) ? $b : (isset($c) ? $c : $d));
但在大多数情况下,Null 合并运算符都可以。
您可以使用条件为 TRUE
的 switch / case
。
示例:
switch (TRUE) {
case (isset($a)) : return $a; break;
case (isset($b)) : return $b; break;
case (isset($c)) : return $c; break;
default : return $d;
}
进一步阅读:
我有一个类似这样的代码:
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 在评论中指出的那样,这与您问题中的代码略有不同。如果 $a
是 FALSE
那么它被定义并且将被返回。如果那不是你想要的,你可以回到 Ternary Operator:
return isset($a) ? $a : (isset($b) ? $b : (isset($c) ? $c : $d));
但在大多数情况下,Null 合并运算符都可以。
您可以使用条件为 TRUE
的 switch / case
。
示例:
switch (TRUE) {
case (isset($a)) : return $a; break;
case (isset($b)) : return $b; break;
case (isset($c)) : return $c; break;
default : return $d;
}
进一步阅读: