2013-07-24 35 views
0

我努力學習switch case PHP代碼。這是使用break的時候工作正常的程序。開關罩,看不慣

for ($i=1;$i<=100;$i++) { 
switch(true) { 
     case ($i%5 == 0 && $i%3 == 0): 
      print 'foobar'; 
      break; 
     case ($i%3 == 0 ): 
      print 'foo'; 
      break; 
     case ($i%5 == 0): 
      print 'bar'; 
      break; 
     case ($i%5 != 0 && $i%3 != 0): 
      print $i; 
      break; 
    } 
    echo '<br>'; 
} 

但是,當我使用下面的代碼,它給了我意想不到的結果:

for ($i=1;$i<100;$i++) { 
switch(true) { 
    case ($i%3 == 0 ): 
     print 'foo'; 
    case ($i%5 == 0): 
     print 'bar'; 
    default: 
     print $i; 
} 
echo '<br>'; 
} 

什麼是錯在第二個例子?即使執行上述任何一種情況,default也會執行嗎?也是爲什麼$i%5情況下運行時$i等於3?

回答

1

因爲第一個使用break,和第二代碼段沒有。

如果不加break,從下一個情況下,代碼也將被執行,即使條件不滿足。

也就是說在PHP中是多麼switch的作品,並在一對夫婦的其他類似C語言的爲好。它從(類似)case聲明不同,因爲你可以從類Pascal語言和SQL知道這一點。

+0

所以,它的工作原理就像,如果一個案例返回true,那麼所有下面的案例都會執行? – TheGodWings

+0

正確。所以你需要'休息'來阻止它這樣做。 – GolezTrol

+0

非常感謝 – TheGodWings

0

在一個PHP switch()聲明中,一旦滿足case,每行代碼將被執行,直到break或塊的結尾。

這允許故意使用的什麼叫做「砸鍋」

這就是爲什麼你的第一個例子中的作品,當你預期你的第二個例子中並沒有這樣做。