四大流程控制關鍵字對比
| 關鍵字 | 作用域 | 主要用途 | 典型場景 |
| return | 函數/方法 | 結束函數執行、返回值 | 函數提前退出、返回計算結果 |
| exit / die | 整個腳本 | 立即終止腳本、可輸出訊息/狀態碼 | 致命錯誤、維護模式、下載輸出後結束 |
| break | 循環/switch | 跳出當前層或指定層循環 | 找到目標跳出、switch 分支結束 |
| continue | 循環 | 跳過本次迭代剩餘代碼、進入下一次 | 過濾不符合條件的項目 |
1. return —— 函數級返回
function divide($a, $b) {
if ($b == 0) return false; // 提前返回,不執行後續
return $a / $b;
}
$result = divide(10, 0); // false
// return 只結束當前函數,調用者繼續執行
2. exit / die —— 腳本級終止
<?php
echo "開始\n";
exit("錯誤:配置文件缺失"); // 輸出訊息並終止,狀態碼 0
// die() 是 exit() 別名
// 帶狀態碼
exit(1); // 非零表示異常,Shell 腳本可捕獲 $?
?>
後面的代碼永不執行
3. break —— 跳出循環/Switch
$arr = ['one','two','three','stop','four'];
foreach ($arr as $v) {
if ($v === 'stop') break; // 跳出 foreach
echo "$v\n";
}
// 輸出:one two three
// 多層跳出
$i = 0;
while (++$i) {
switch ($i) {
case 5: echo "At 5\n"; break 1; // 只跳出 switch
case 10: echo "At 10\n"; break 2; // 跳出 switch + while
}
}
4. continue —— 跳過本次迭代
$arr = [1,2,3,4,5,6];
foreach ($arr as $v) {
if ($v % 2 === 0) continue; // 跳過偶數
echo "$v\n"; // 只輸出奇數
}
// 多層 continue
$i = 0;
while ($i++ < 3) {
echo "Outer $i\n";
$j = 0;
while (++$j) {
if ($j === 2) continue 2; // 跳過中層剩餘,直接進入外層下一輪
echo " Middle $j\n";
}
}
常見誤區與最佳實踐
- exit 後有緩衝區內容:
exit 會刷新輸出緩衝區,但 ob_start() 開啟時需注意順序。
- return 在全局作用域:包含文件中
return 返回給 include 調用處,不終止主腳本。
- break/continue 只能用在循環/switch:在
if、function 中使用會報 Fatal Error。
- switch 視為循環:PHP 中
continue 在 switch 中等同 break,若在循環內的 switch 想跳過循環本輪,用 continue 2。
- 異常替代 exit:現代框架拋出
HttpException 由全局異常處理器統一輸出,避免到處 exit 導致測試困難。
速查決策樹
在函數內要提前結束並返回值? → return
整個腳本必須立即停止(錯誤/下載/維護)? → exit/die
在循環中找到目標不再繼續? → break
在循環中跳過當前項目處理下一個? → continue
在 switch case 結束防止貫穿? → break
在循環內的 switch 想跳過本輪循環? → continue 2