Php 切换多案例语句
有人能建议我如何替换下面的代码吗 如何重写代码以避免重复块Php 切换多案例语句,php,switch-statement,Php,Switch Statement,有人能建议我如何替换下面的代码吗 如何重写代码以避免重复块案例3:{code block A;break;} switch(i) { case 1: {code block A; break;} case 2: {code block b; break;} case 3: {code block A; break;} default: {code block default; break;} } 如何组合案例1和案例3的代码?此格式显示在: 2021年4月19日编辑
案例3:{code block A;break;}
switch(i) {
case 1: {code block A; break;}
case 2: {code block b; break;}
case 3: {code block A; break;}
default: {code block default; break;}
}
如何组合案例1和案例3的代码?此格式显示在: 2021年4月19日编辑: 随着PHP8和新的
match
功能的发布,使用match
而不是开关通常是更好的解决方案
对于上述示例,与match
对应的等效项为:
$matchResult = match($i) {
1, 3 => // code block A
2 => // code block B
default => // code block default
}
match
语句较短,不需要中断并返回值,因此您不必多次赋值
而且,match
的行为就像它在做==
而不是=
。这可能会受到讨论,但事实就是这样。类似这样的东西
switch(i) {
case 1:
case 3: {code block A; break;}
case 2: {code block b; break;}
default: {code block default; break;}
}
差不多
$i = 10;
switch($i){
case $i == 1 || $i > 3:
echo "working";
break;
case 2:
echo "i = 2";
break;
default:
echo "i = $i";
break;
}
是的,这是几乎所有支持switch-case
的语言中的标准模式。这被称为“失败”,因为你从一个案例失败到下一个案例。这就是为什么在那里有对break
的调用,以防止它从你不想要的地方掉下来。如果i=1,php将测试i=3?还是直接进入代码?@MatheusOliveira我认为当一个案例匹配时,它会一直持续到它达到一个中断。因此,对于上面的开关示例,如果$i=3,则执行代码块A,直到它到达断点。如果$i=1,则代码将按照情况1:运行,直到到达断点。如果您愿意,您可以在案例1之后添加额外的代码,这只适用于案例1,但如果没有中断,代码块A也将运行。
$i = 10;
switch($i){
case $i == 1 || $i > 3:
echo "working";
break;
case 2:
echo "i = 2";
break;
default:
echo "i = $i";
break;
}