1.14.5 switch语句
switch语句的工作方式类似于if语句,但是它允许条件可以有多于两个的可能值。在一个if语句中,条件或者为true,或者为false。而在switch语句中,只要条件值是一个简单的数据类型(整型、字符串或浮点型),条件就可以具有任意多个不同的值。
必须提供一个case语句来处理每一个条件值,并且提供相应的动作代码。此外,还应该有一个默认的case条件来处理没有提供任何特定值的情况。
Bob希望了解哪种广告对他的生意有所帮助。此时,可以在订单中加入一个调查问题,将如下所示的HTML代码插入到订单的表单体中,该表单的运行结果如图1-6所示。
图 1-6 现在的订单将询问访问者是通过哪种渠道知道Bob的汽车零部件商店
<tr>
<td>How did you find Bob's?</td>
<td><select name="find">
<option value="a">I'm a regular customer</option>
<option value="b">TV advertising</option>
<option value="c">Phone directory</option>
<option value="d">Word of mouth</option>
</select>
</td>
</tr>
上例的HTML代码中加入了一个新的表单变量(变量名为find),其值可以是"a"、"b"、"c"或"d"。可以使用一系列的if和elseif语句来处理这个新变量,如下所示:
if($find=="a"){
echo"<p>Regular customer.</p>";
}elseif($find=="b"){
echo"<p>Customer referred by TV advert.</p>";
}elseif($find=="c"){
echo"<p>Customer referred by phone directory.</p>";
}elseif($find=="d"){
echo"<p>Customer referred by word of mouth.</p>";
}else{
echo"<p>We do not know how this customer found us.</p>";
}
或者也可以用如下所示的switch语句来替换以上代码:
switch($find){
case"a":
echo"<p>Regular customer.</p>";
break;
case"b":
echo"<p>Customer referred by TV advert.</p>";
break;
case"c":
echo"<p>Customer referred by phone directory.</p>";
break;
case"d":
echo"<p>Customer referred by word of mouth.</p>";
break;
default:
echo"<p>We do not know how this customer found us.</p>";
break;
}
(请注意,以上这两个例子都假设从$_POST数组中提取了$find变量。)
switch语句和if或elseif语句的行为有所不同。如果没有专门使用花括号来声明一个语句块,if语句只能影响一条语句。而switch语句刚好相反。当switch语句中的特定case被匹配时,PHP将执行该case下的代码,直至遇到break语句。如果没有break语句,switch将执行这个case以下所有值为true的case中的代码。当遇到一个break语句时,才会执行switch后面的语句。