1.14.5 switch语句

switch语句的工作方式类似于if语句,但是它允许条件可以有多于两个的可能值。在一个if语句中,条件或者为true,或者为false。而在switch语句中,只要条件值是一个简单的数据类型(整型、字符串或浮点型),条件就可以具有任意多个不同的值。

必须提供一个case语句来处理每一个条件值,并且提供相应的动作代码。此外,还应该有一个默认的case条件来处理没有提供任何特定值的情况。

Bob希望了解哪种广告对他的生意有所帮助。此时,可以在订单中加入一个调查问题,将如下所示的HTML代码插入到订单的表单体中,该表单的运行结果如图1-6所示。

1.14.5 switch语句 - 图1

图 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后面的语句。