$a=5;switch($a){ case 6: echo "\$a is 6
"; case 5: echo "\$a is 5
"; case 4: echo "\$a is 4
";}
如上例中,我的理解是每次$a跟case後的值比對,符合的話就輸出語句,不符合則比對下一個case條件。但是瀏覽器的輸出是
$a is 5
$a is 4
我不太明白最後一個case語句中明明$a!=4還會輸出。
(我之前對switch語句必須加上break的理解是:這樣可以在找到合格case後立即跳出switch從而加快執行速度。現在看來不是的。)
回複內容:
$a=5;switch($a){ case 6: echo "\$a is 6
"; case 5: echo "\$a is 5
"; case 4: echo "\$a is 4
";}
如上例中,我的理解是每次$a跟case後的值比對,符合的話就輸出語句,不符合則比對下一個case條件。但是瀏覽器的輸出是
$a is 5
$a is 4
我不太明白最後一個case語句中明明$a!=4還會輸出。
(我之前對switch語句必須加上break的理解是:這樣可以在找到合格case後立即跳出switch從而加快執行速度。現在看來不是的。)
你可以這樣理解,switch會根據條件,跳轉到第一個匹配的 case 處繼續執行。
case 只是一個供switch 跳轉的標記,並沒有劃分區塊的作用。
所以:
- 即使有多個case與switch匹配,也只會跳轉到第一個匹配的case.
- 如果不break, 會從匹配的第一個case開始,一直執行到整個switch結構結束.
swich 只是跳轉到那裡開始執行,如果不break 會把下面的所有case全執行一遍的。
這是基礎!問答你這個問題 我感覺一點成就感都沒。。。。
原理很簡單:當某case後的值與$a匹配時,該case的代碼塊將被執行。break之所以存在,就是放置所匹配case之後的代碼會執行下去。如果$a=6; 那麼6、5、4都會被輸出
因為switch並不是一種模式比對,它類似於彙編中的jmp。
這種文法的原始目的要滿足語義的連貫性,請看下面的情境,
switch($a){ case 6: case 5: echo "\$a is not 4
"; break; case 4: echo "\$a is 4
";}
6和5的處理方式一樣。