Php 简明教程
PHP - Switch Statement
PHP 中的 switch 语句可以看作对相同表达式中的一系列 if…else 语句的替代。假设你需要用许多不同的值来比较一个表达式或一个变量,并且根据它等于哪个值执行不同的代码片段。在这样的情况下,你需要使用多重 if…elseif…else 构造。
然而,这样的构造会使代码变得很乱,并且难以理解。为了简化这样的代码,可以在 PHP 中使用 switch case 构造,它提供了一个更简洁的替代方案来避免 if..elseif..else 代码的长块。
下面的 PHP 脚本使用 if elseif 语句:
if ($x == 0) {
echo "x equals 0";
} elseif ($x == 1) {
echo "i equals 1";
} elseif ($x == 2) {
echo "x equals 2";
}
你可以使用 switch case 语句来获得相同的结果,如下所示:
switch ($x) {
case 0:
echo "x equals 0";
break;
case 1:
echo "x equals 1";
break;
case 2:
echo "x equals 2";
break;
}
switch 语句后跟一个表达式,该表达式与每个 case 子句中的值依次进行比较。如果发现表达式与任何 case 匹配,则执行相应的语句块。
-
switch 语句按行执行大括号内的情语句。
-
当且仅当找到一个 case 语句,其表达式运算得到的值与 switch 表达式的值相匹配时,PHP 才会开始执行语句,直到 switch 块的末尾,或者第一次遇到一个 break 语句。
-
如果您不在 case 语句列表的末尾编写一个 break 语句,那么 PHP 将继续执行后续 case 的语句。
Example
尝试移除 break,然后再运行上面的代码。如果 x 的值是 0,那么您会发现输出包括 "x equals 1" 和 "x equals 2" 这两行。
<?php
$x=0;
switch ($x) {
case 0:
echo "x equals 0 \n";
case 1:
echo "x equals 1 \n";
case 2:
echo "x equals 2";
}
?>
它将生成以下 output −
x equals 0
x equals 1
x equals 2
因此,确保以 break 语句结束每个 case 块很重要。
The Default Case in Switch
default case 是一个特例。这种 case 与其他 case 都不匹配。使用 default 是可选的,但如果使用,这必须是大括号内最后一个 case。
您可以将多个 case 组合起来,以模拟与 or 运算符组合在一起的多个逻辑表达式。
<?php
$x=10;
switch ($x) {
case 0:
case 1:
case 2:
echo "x between 0 and 2 \n";
break;
default:
echo "x is less than 0 or greater than 2";
}
?>
要比较的值都给在 case clause 中。值可以是一个数字、一个字符串,甚至是一个函数。不过,您不能在 case clause 中使用比较运算符 (<、>、== 或 !=) 作为值。
您可以在 case 子句中选择使用分号,而不是冒号。如果没有匹配的 case,并且也没有 default 分支,那么就不会执行任何代码,就像没有 if 语句为 true 一样。
The switch-endswitch Statement
PHP 允许使用替代语法,通过 switch-endswitch 语句来界定 switch 结构。以下版本的 switch case 是可以接受的。
<?php
$x=0;
switch ($x) :
case 0:
echo "x equals 0";
break;
case 1:
echo "x equals 1 \n";
break;
case 2:
echo "x equals 2 \n";
break;
default:
echo "None of the above";
endswitch
?>
Using the Break Statement in Switch…Case
显然,您不用编写 break 来终止 default case,因为它在 switch 结构中是最后一个 case。
Example
请看以下示例:
<?php
$d = date("D");
switch ($d){
case "Mon":
echo "Today is Monday";
break;
case "Tue":
echo "Today is Tuesday";
break;
case "Wed":
echo "Today is Wednesday";
break;
case "Thu":
echo "Today is Thursday";
break;
case "Fri":
echo "Today is Friday";
break;
case "Sat":
echo "Today is Saturday";
break;
case "Sun":
echo "Today is Sunday";
break;
default:
echo "Wonder which day is this ?";
}
?>
它将生成以下 output −
Today is Monday