该switch结构执行与一系列if语句相同的功能,但是可以用更少的代码行完成这项工作。switch比较语句中定义的要测试的值与每个case语句中的值是否相等,直到找到匹配项并执行该块中的代码为止。如果找不到匹配的case语句,default则执行块中的代码(如果存在)。
case或default语句中的每个代码块都应以该break语句结尾。这将停止执行switch结构,并在此后立即继续执行代码。如果break省略该case语句,即使没有match,也将执行下一条语句的代码。如果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"; // 注意缺少中断,下一个程序段也将执行 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构造时键入松散的可能问题,请参阅切换惊喜