PHP switch 语句

switch 语句用于基于不同条件执行不同的动作。

PHP switch 语句

使用 switch 语句来选择要执行的多个代码块之一。

语法

switch (表达式) {
  case 标签 1:
    // 代码块;
    break;
  case 标签 2:
    // 代码块;
    break;
  case 标签 3:
    // 代码块;
    break;
  default:
    // 代码块;
}

这是它的工作原理:

  • 表达式只计算一次
  • 将表达式的值与每个 case 的值进行比较
  • 如果找到匹配项,则执行相关联的代码块
  • break 关键字会跳出 switch 块
  • 如果没有匹配项,则执行 default 代码块

实例

$favcolor = "red";

switch ($favcolor) {
  case "red":
    echo "你最喜欢的颜色是红色!";
    break;
  case "blue":
    echo "你最喜欢的颜色是蓝色!";
    break;
  case "green":
    echo "你最喜欢的颜色是绿色!";
    break;
  default:
    echo "你最喜欢的颜色既不是红色、蓝色,也不是绿色!";
}

亲自试一试

break 关键字

当 PHP 遇到 break 关键字时,它会跳出 switch 块。

这将停止执行更多代码,并且不再测试更多 case。

最后一个块不需要 break,因为该块无论如何都会结束。

警告:如果你在不是最后一个的 case 中省略了 break 语句,并且该 case 得到了匹配,那么即使评估结果与 case 不匹配,下一个 case 也将被执行!

实例

如果我们从 case "red" 中移除 break 语句会发生什么?

$favcolor 是红色,所以执行了 case "red" 的代码块,但由于它没有 break 语句,因此也会执行 case "blue" 的代码块:

$favcolor = "red";

switch ($favcolor) {
  case "red":
    echo "你最喜欢的颜色是红色!";
  case "blue":
    echo "你最喜欢的颜色是蓝色!";
    break;
  case "green":
    echo "你最喜欢的颜色是绿色!";
    break;
  default:
    echo "你最喜欢的颜色既不是红色、蓝色,也不是绿色!";
}

亲自试一试

default 关键字

default 关键字指定了在没有 case 匹配时要运行的代码:

实例

如果没有 case 得到匹配,则执行 default 块:

$d = 4;

switch ($d) {
  case 6:
    echo "今天是星期六";
    break;
  case 0:
    echo "今天是星期天";
    break;
  default:
    echo "期待周末";
}

亲自试一试

default case 不必是 switch 块中的最后一个 case:

实例

允许将 default 块放在 switch 块的末尾之外的位置,但不建议这样做。

$d = 4;

switch ($d) {
  default:
    echo "期待周末";
    break;
  case 6:
    echo "今天是星期六";
    break;
  case 0:
    echo "今天是星期天";
}

亲自试一试

注意:如果 default 不是 switch 块中的最后一个块,请记得用 break 语句结束 default 块。

公共代码块

如果你想让多个 case 使用相同的代码块,你可以这样指定 case:

实例

每个代码块有多个 case:

$d = 3;

switch ($d) {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:  
    echo "这周感觉好长!";
    break;
  case 6:
  case 0:
    echo "周末最棒了!";
    break;
  default:
    echo "出错了。";
}

亲自试一试