【问题标题】:Fall-through Switch Case with For Loop PHP带有 For 循环 PHP 的贯穿式开关盒
【发布时间】:2016-07-06 11:46:43
【问题描述】:

请帮忙。

for($i=0; $i<12; $i++ ){
        switch($i) {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
                echo ("i is less than 5 <br>");
                break;
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                echo ("i is less than 10 <br>");
                break;
            default:
                echo ("i is 10 or more <br>");
        }
    }

这是我在 Java 书籍中获得的示例代码,我将上面的代码翻译成 PHP。

以下代码的输出:

i is less than 5 
i is less than 5 
i is less than 5 
i is less than 5 
i is less than 5 
i is less than 10 
i is less than 10 
i is less than 10 
i is less than 10 
i is less than 10 
i is 10 or more 
i is 10 or more

我的问题是,即使案例 0 到案例 3 没有任何后续代码并且案例 4 是带有 echo 语句的案例,它怎么会输出“i 小于 5”?我很困惑,谁能给我解释一下。提前致谢。

【问题讨论】:

  • 这就是“fall through”的意思——如果你在一个case语句之后没有break;,它就会进入下一个。
  • 你的标题似乎表明你已经知道答案了。此外,the manual 对此进行了很好的介绍,这应该是您研究此问题的第一个地方。
  • 但是为什么 case 0 到 case 3 输出 i 小于 5,即使它没有 echo 语句。我对此进行了研究,如果一个案例没有任何中断语句,它将继续执行下一个,直到遇到中断语句。我认为它应该只在遇到案例 4 时输出 i 小于 5 一次

标签: php switch-statement case fall-through


【解决方案1】:

这就是switch 的运作方式。为了停止陷入下一个案例,您必须使用 break 关键字。我知道的每一种语言都是一样的,包括 JavaScript、PHP 和 Python。

如需参考,请查看PHP manual

【讨论】:

    【解决方案2】:

    想象一下你的开关是这样的

    switch($i) {
                case 0:
                   case 1:
                       case 2:
                           case 3:
                              case 4:
                                 echo ("i is less than 5 <br>");
                                 break;
                case 5:
                   case 6:
                     case 7:
                        case 8:
                           case 9:
                             echo ("i is less than 10 <br>");
                             break;
                default:
                    echo ("i is 10 or more <br>");
    

    它将继续沿链进行直到调用中断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2021-02-07
      • 2014-09-01
      相关资源
      最近更新 更多