【问题标题】:Switch multiple case statement切换多个 case 语句
【发布时间】:2014-03-31 05:05:38
【问题描述】:

有人可以建议我如何替换下面的代码吗?

如何重写代码以避免重复块case 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 的代码?

【问题讨论】:

    标签: php switch-statement


    【解决方案1】:

    这种格式显示在PHP docs:

    switch (i) {
        case 1:
        case 3:
            code block A;
            break;
        case 2:
            code block B;
            break;
        default:
            code block default;
            break;
    }
    

    编辑 2021 年 4 月 19 日:

    随着 PHP8 的发布和新的match 函数,使用match 而不是switch 通常是更好的解决方案。

    对于上面的示例,match 的等效项是:

    $matchResult = match($i) {
        1, 3    => // code block A
        2       => // code block B
        default => // code block default
    }
    

    match 语句更短,不需要中断并返回一个值,因此您不必多次赋值。

    此外,match 的行为就像是在执行 === 而不是 ==。这可能需要讨论,但事实就是如此。

    【讨论】:

    • 是的,这是几乎所有支持switch - case 的语言的标准模式。这被称为“失败”,因为您从一个案例跌入下一个案例。这就是为什么你在那里调用break,以防止它掉到你不想要的地方。
    • 如果 i = 1,php 是否会测试 i = 3?还是要直接上代码?
    • @MatheusOliveira 我认为当一个案例匹配时,它会一直持续到中断。所以对于上面的 switch 例子,如果 $i = 3,代码块 A 被执行,直到它到达 break。如果 $i = 1,则代码在 case 1: 之后运行,直到到达中断。如果你愿意,你可以在 case 1 之后添加额外的代码,这仅适用于 case 1,但是如果没有中断,代码块 A 也会运行。
    【解决方案2】:

    类似的东西

    switch(i) {
        case 1:
        case 3:  {code block A; break;}
    
        case 2:  {code block b; break;}
    
        default: {code block default; break;}
    }
    

    【讨论】:

      【解决方案3】:

      类似

          $i = 10;
          switch($i){
              case $i == 1 || $i > 3:
                  echo "working";
                  break;
              case 2:
                  echo "i = 2";
                  break;
              default: 
                echo "i = $i";
                break;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 2022-07-23
        • 2022-01-26
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        相关资源
        最近更新 更多