語法結構
switch ($expr) {
case $val1:
// 代碼
break;
case $val2:
// 代碼
break;
...
default:
// 預設代碼
}
執行機制
- 計算
$expr 值
2. 依序比對 case 值(鬆散比較 ==)
3. 匹配到 → 執行該案例代碼,直到 break 或結束
4. 全不匹配 → 執行 default
完整範例
$x = 2;
switch ($x) {
case 0:
echo "x 等於 0";
break;
case 1:
echo "x 等於 1";
break;
case 2:
echo "x 等於 2";
break;
default:
echo "x 不等於 0、1、2";
}
// 輸出:x 等於 2
重要特性與提示
| 特性 | 說明 |
| 多 case 共用代碼 | case 1: case 2: case 3: ... |
| case 值型別 | 支援整數、浮點、字串、常數 |
| default 非必填 | 可省略 |
| 鬆散比較 | switch("2") case 2: 會匹配(==) |
| 嚴格比較替代 | 需用 match (PHP 8) 或 if/else === |
| 穿透行為 | 無 break 會繼續執行下一 case |
進階:PHP 8 match 表達式
$result = match ($x) {
0 => '零',
1 => '一',
2 => '二',
default => '其他',
};
// 嚴格比較 (===)、無穿透、直接回傳值
最佳實踐建議
- 條件較少(≤3)且簡單 →
if/else 可讀性更好
- 多重離散值比對 →
switch 結構清晰
- 需嚴格型別比對 → PHP 8 用
match,舊版用 if/else ===
- case 內代碼過長 → 提取為函數/方法
- 永遠加上
break,或註釋說明刻意穿透