switch語句中省略break後為什麼會執行不滿足的case條件後的語句?執行的依據不是比對case條件嗎?

來源:互聯網
上載者:User
$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的處理方式一樣。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.