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;
    }