开关
switch
结构执行与一系列 if
语句相同的功能,但可以用更少的代码行完成工作。将 switch
语句中定义的要测试的值与每个 case
语句中的值进行相等性比较,直到找到匹配并执行该块中的代码。如果找不到匹配的 case
语句,则执行 default
块中的代码(如果存在)。
case
或 default
语句中的每个代码块都应以 break
语句结束。这将停止 switch
结构的执行,并在之后立即继续执行代码。如果省略 break
语句,则执行下一个 case
语句的代码,即使没有匹配项也是如此。如果忘记了 break
语句,这可能会导致意外的代码执行,但在多个 case
语句需要共享相同代码的情况下也很有用。
switch ($colour) {
case "red":
echo "the colour is red";
break;
case "green":
case "blue":
echo "the colour is green or blue";
break;
case "yellow":
echo "the colour is yellow";
// note missing break, the next block will also be executed
case "black":
echo "the colour is black";
break;
default:
echo "the colour is something else";
break;
}
除了测试固定值之外,还可以通过向 switch
语句和 case
语句的任何表达式提供布尔值来强制构造测试动态语句。请记住使用第一个匹配值,因此以下代码将输出“超过 100”:
$i = 1048;
switch (true) {
case ($i > 0):
echo "more than 0";
break;
case ($i > 100):
echo "more than 100";
break;
case ($i > 1000):
echo "more than 1000";
break;
}
有关使用 switch
构造时松散键入的可能问题,请参阅 Switch Surprises