PHP 的 switch 语句可以被视为一系列 if...else 语句。假设您需要比较具有许多不同值的表达式或变量,并根据它等于的值执行不同的代码。在这种情况下,您将使用多重含义 if...elseif...else 构造。
但是,这样的结构会使代码非常混乱且难以遵循。为了简化此类代码,您可以在 PHP 中使用 switch case 结构,它提供了一种更紧凑的替代方案来避免 if..elseif..else 代码。
以下 PHP 脚本使用 if elseif 语句 -
if ($x == 0) {
echo "x 等于 0";
} elseif ($x == 1) {
echo "x 等于 1";
} elseif ($x == 2) {
echo "x 等于 2";
}
您可以使用 switch case 语句获得相同的结果,如下所示 -
switch ($x) {
case 0:
echo "x 等于 0";
break;
case 1:
echo "x 等于 1";
break;
case 2:
echo "x 等于 2";
break;
}
switch 语句后跟一个表达式,该表达式将依次与每个 case 子句的值进行比较。如果发现表达式与任何 case 匹配,则执行相应的语句块。
- switch 语句逐行执行大括号内的语句。
- 如果找到一个 case 语句,其表达式的计算结果与 switch 表达式的值匹配,PHP 就会开始执行这些语句,直到 switch 块结束,或者第一次遇到 break 语句。
- 如果你没有在 case 的语句列表的末尾写 break 语句,PHP 将继续执行以下 case 的语句。
例子
尝试通过删除 breaks 来运行上述代码。如果 x 的值为 0,您将发现输出包括 “x 等于 1” 和 “x 等于 2” 行。
<?php
$x=0;
switch ($x) {
case 0:
echo "x 等于 0 \n";
case 1:
echo "x 等于 1 \n";
case 2:
echo "x 等于 2";
}
?>
它将产生以下输出 -
x 等于 1
x 等于 2
因此,确保以 break 语句结束每个 case 块非常重要。
Switch 默认情况
一种特殊情况是默认情况。此大小写匹配其他大小写不匹配的任何内容。使用 default 是可选的,但如果使用,则必须是大括号内的最后一个大小写。
您可以合并多个 case 来模拟多个与 or 运算符组合的逻辑表达式。
<?php
$x=10;
switch ($x) {
case 0:
case 1:
case 2:
echo "x介于0和2之间 \n";
break;
default:
echo "x小于0或大于2";
}
?>
要比较的值在 case 子句中给出。该值可以是数字、字符串,甚至是函数。但是,不能将比较运算符(<、> == 或 !=)用作 case 子句的值。
您可以选择在 case 子句使用分号而不是冒号。如果未找到匹配的 case,并且也没有 default 分支,则不会执行任何代码,就像没有 if 语句为 true 一样。
switch-endswitch 语句
PHP 允许通过使用 switch-endswitch 语句分隔 switch 结构来使用替代语法。以下版本的 switch case 是可接受的。
<?php
$x=0;
switch ($x) :
case 0:
echo "x等于0";
break;
case 1:
echo "x等于1 \n";
break;
case 2:
echo "x等于2 \n";
break;
default:
echo "以上都没有";
endswitch
?>
switch...Case 使用 break 语句
显然,您无需编写 break 来终止默认 case,它是 switch 构造中的最后一个 case。
例子
请看下面的例子 -
<?php
$d = date("D");
switch ($d){
case "Mon":
echo "今天是星期一";
break;
case "Tue":
echo "今天是星期二";
break;
case "Wed":
echo "今天是星期三";
break;
case "Thu":
echo "今天是星期四";
break;
case "Fri":
echo "今天是星期五";
break;
case "Sat":
echo "今天是星期六";
break;
case "Sun":
echo "今天是星期天";
break;
default:
echo "不知道今天是哪一天?";
}
?>
它将产生以下输出 -