是否有一种方法使用'OR'操作符或等价的PHP开关?
例如,这样的东西:
switch ($value) {
case 1 || 2:
echo 'the value is either 1 or 2';
break;
}
是否有一种方法使用'OR'操作符或等价的PHP开关?
例如,这样的东西:
switch ($value) {
case 1 || 2:
echo 'the value is either 1 or 2';
break;
}
当前回答
匹配表达式(PHP 8)
PHP 8引入了一个新的匹配表达式,它与switch类似,但语法更短,区别如下:
不需要break语句 使用逗号组合条件 返回一个值 具有严格的类型比较 要求比较是详尽的(如果没有找到匹配,UnhandledMatchError将被抛出)
例子:
match ($value) {
0 => '0',
1, 2 => "1 or 2",
default => "3",
}
其他回答
使用以下代码:
switch($a) {
case 1:
case 2:
.......
.......
.......
break;
}
1和2都调用该块。
switch ($value)
{
case 1:
case 2:
echo "the value is either 1 or 2.";
break;
}
这就是所谓的“穿过”案例块。这个术语存在于大多数实现switch语句的语言中。
注意,你也可以使用闭包将开关的结果(使用早期返回)赋值给一个变量:
$otherVar = (static function($value) {
switch ($value) {
case 0:
return 4;
case 1:
return 6;
case 2:
case 3:
return 5;
default:
return null;
}
})($i);
当然,这种方法已经过时了,因为这正是新PHP 8 match函数的目的,如_dom93 answer中所示。
匹配表达式(PHP 8)
PHP 8引入了一个新的匹配表达式,它与switch类似,但语法更短,区别如下:
不需要break语句 使用逗号组合条件 返回一个值 具有严格的类型比较 要求比较是详尽的(如果没有找到匹配,UnhandledMatchError将被抛出)
例子:
match ($value) {
0 => '0',
1, 2 => "1 or 2",
default => "3",
}
我建议你按(手动)开关。
switch ($your_variable)
{
case 1:
case 2:
echo "the value is either 1 or 2.";
break;
}
解释
就像你想要执行单个语句的值一样,你可以把它放在没有break的地方,直到或除非找到break。它将继续执行代码,如果发现了break,它将从switch case中出来。