承接上节的 if/else,讲解了 PHP 多分支控制的另一核心结构:switch 语句,重点剖析了 break 的作用与“穿透”特性。
一、 switch 基础与输出结果
switch 适合处理变量等值匹配(如月份、状态码),结构比 if/else if 更清晰。
- 代码示例:
$num = 3;
switch($num) {
case 1: echo '一月','<br />';
case 2: echo '二月','<br />'; break;
case 3: echo '三月','<br />'; break;
default: echo '不是正确的月份'; break;
}Code language: PHP (php)
- 输出结果:
三月(匹配case 3,遇break结束)。 - 呼应历史:延续了
echo逗号隔参、<br />换行、单引号字符串(上节)与分号结尾习惯。
二、 break 的核心作用(防穿透)
- 机制:
switch匹配到对应case后,若无break,会继续“穿透”执行下方所有case代码,直到遇到break或结束。 - 注意:
case 1无break,若$num=1,会输出“一月”并穿透到case 2输出“二月”,最终在case 2的break停止。 - default:兜底分支(类似
if的最后else),非必须但推荐。
三、 switch vs if/else
| 特性 | if / else if | switch |
|---|---|---|
| 适用场景 | 范围判断(如 >=90)、复杂条件 | 精确等值(如 == 1) |
| 执行逻辑 | 逐条判断,命中即跳出不穿透 | 匹配后默认穿透,需 break |
| 代码观感 | 分支多时冗长 | 等值分支多时更整洁 |
上半部是 if/else(成绩/月份),下半部是等价 switch。
四、 多个 case 合并(穿透的合理利用)
最下方展示了无代码体的 case 合并(多值同处理):
$num = 3;
switch($num) {
case 3:
case 4:
case 5:
echo '春天','<br />'; break; // 3/4/5月均输出“春天”
default: echo '不是正确的月份'; break;
}Code language: PHP (php)
- 原理:
case 3/4/5无break且空语句,匹配任一即“穿透”到echo '春天',这是有意利用穿透简化代码(季节判断)。
Previous: 控制结构if else
Next: 循环语句for循环