控制结构switch

承接上节的 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 1break,若 $num=1,会输出“一月”并穿透到 case 2 输出“二月”,最终在 case 2break 停止。
  • default:兜底分支(类似 if 的最后 else),非必须但推荐。

三、 switch vs if/else

特性if / else ifswitch
适用场景范围判断(如 >=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/5break 且空语句,匹配任一即“穿透”到 echo '春天',这是有意利用穿透简化代码(季节判断)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注