【发布时间】:2020-11-11 20:43:46
【问题描述】:
我有一个类似这样的代码:
if($a) {
return $a;
} elseif($b) {
return $b;
} elseif($c) {
return $c;
} else {
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 Coalescing Operator 会这样做。
【讨论】:
$a === false返回$a,还是测试不正确?
$a ?: $b ?: $c ?: $d,很短,works
Undefined variable: a 警告。
您可以使用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;
}
进一步阅读:
【讨论】: