網頁開頭附近那句「在 PHP 中,為了配合 continue 的使用,switch 陳述式被視為一種迴圈結構」的說明讓我有點困惑,所以我用以下程式碼做了一些實驗,想弄清楚在 switch 敘述式內使用 continue 的確切語義:
<?php
for( $i = 0; $i < 3; ++ $i )
{
echo ' [', $i, '] ';
switch( $i )
{
case 0: echo 'zero'; break;
case 1: echo 'one' ; XXXX;
case 2: echo 'two' ; break;
}
echo ' <' , $i, '> ';
}
?>
我用以下程式碼取代 XXXX:
- continue 1
- continue 2
- break 1
- break 2
並觀察不同的結果。這讓我想到用一句話來描述 break 和 continue 的區別:
continue 會在右大括號 ( } ) 之前繼續執行,而 break 則會在右大括號之後繼續執行。
推論:由於 switch 並非(真正)迴圈結構,在 switch 的右大括號之前繼續執行與使用 break 陳述式的效果相同。對於 (for、while、do-while) 迴圈來說,在它們的右大括號之前繼續執行意味著開始新的迭代——這當然與 break 陳述式的行為截然不同。
在上面的一句話描述中,我忽略了 break/continue 參數的存在,但即使提供參數,這句話仍然適用。