2016-07-06 19 views
-2

请帮忙。带For For Loop的直通式开关外壳PHP

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个输出“i小于5”,即使它不具有任何下面的代码和案例4是有回声的人吗?我很困惑,有人可以向我解释这一点。提前致谢。

+1

这就是“fall through”指的是 - 如果你在case语句后没有'break',它会进入下一个。 – iainn

+1

你的头衔似乎表明你已经知道答案。此外,[手册](http://php.net/manual/en/control-structures.switch.php)中已经详细介绍了这一点,本应该是您首先研究此问题的地方。 –

+0

但是,如果case 0到case 3输出i小于5,即使它没有echo语句。我已经对此进行了研究,如果一个案件没有任何违规声明,它将继续贯穿下一个案例,直到它遇到一个突破声明。我认为它应该只输出它,当遇到情况4时,我小于5次 –

回答

1

这就是switch应该如何操作。为了避免陷入下一个案例,您必须使用break关键字。我知道的每种语言都是一样的,包括JavaScript,PHP和Python。请参考PHP manual

1

试想一下,你的交换机像这样

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>"); 

它将会继续沿着链条承载,直到突破被调用。