开关

switch 结构执行与一系列 if 语句相同的功能,但可以用更少的代码行完成工作。将 switch 语句中定义的要测试的值与每个 case 语句中的值进行相等性比较,直到找到匹配并执行该块中的代码。如果找不到匹配的 case 语句,则执行 default 块中的代码(如果存在)。

casedefault 语句中的每个代码块都应以 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