2.6 何去何从——流程控制语句
流程控制语句
任何复杂的程序设计都离不开流程控制语句,这些语句决定了我们程序的走向。在PHP中一共包含了3种控制结构:顺序结构(如图2-34所示)、选择结构(如图2-35所示)和循环结构(如图2-36所示)。
图2-34 顺序结构
图2-35 选择结构
图2-36 循环结构
在多数情况下程序都不会简单地使用一种控制结构,一段程序可能会同时包含两种或三种控制结构。PHP中的流程控制语句可以分为如下几类。
● 条件语句:if/else/elseif/switch。
● 循环语句:foreach/while/do while/for。
● 跳转语句:break/continue/return。
下面将详细介绍这些控制语句的应用。
2.6.1 if/else/elseif选择语句
if、else和elseif语句经常会被一起使用,这3个语句中只有if可以单独使用,而else和elseif语句则需要与if语句结合使用。
1.if语句
该语句应用的格式如下:
if (表达式) { 如果表达式的值为TRUE执行的语句 }
if语句执行的流程如图2-37所示。
图2-37 if语句执行流程
2.If…else语句
该语句应用的格式如下:
if (表达式1) { 如果表达式1的值为TRUE执行的语句 }else { 如果表达式1的值为FALSE执行的语句 }
if…else语句执行的流程如图2-38所示。
图2-38 if…else语句执行流程
3.if…elseif…else语句
该语句应用的格式如下:
if (表达式1) { 如果表达式1的值为TRUE执行的语句 }elseif (表达式2) { 如果表达式1的值为FALSE,表达式2的值为TRUE执行的语句 }else { 如果表达式1和表达式2的值都为FALSE执行的语句 }
这里给出的只是if…elseif…else语句最基本的格式,实际应用中还可以加入多个elseif语句。If…elseif…else执行的流程如图2-39所示。
图2-39 if…elseif…else语句执行流程
使用if/elseif/else流程控制语句的应用示例代码如下:
代码2-31光盘\codes\第2章\2.6\if.php
<?php $a=31; $b=22; $c=16; if($a<$b){ echo"变量a小于变量b"; }elseif($a<$c){ echo"变量a小于变量c"; }else{ echo"变量a大于变量b和变量c"; } ?>
该程序被执行时,得到结果如图2-40所示。
图2-40 if…elseif…else语句的应用
Note
当if、elseif或else的执行语句只有一行时可以省略大括号“{}”,但是为了提高代码的可读性我们还是建议加上大括号。此外,“elseif”的另一种写法为“else if”,二者的作用是等价的。
2.6.2 switch选择语句
对于条件判断结果很多的情况,使用if语句将会变得非常麻烦,这个时候可使用switch选择语句。该语句应用格式如下:
switch (表达式){ case表达式1: 执行语句1; break; case表达式2: 执行语句2; break; ...... default: 执行语句3 break; }
当switch语句被调用的时候,会按照从上到下的顺序依次遍历每一个case语句。如果case语句的表达式与switch指定的表达式匹配,则执行case语句内部代码,否则继续向下遍历。如果所有的case语句表达式与switch指定表达式都不匹配,则执行default语句体内的代码。switch语句的执行流程如图2-41所示。
图2-41 switch语句的执行流程
应用switch语句的示例代码如下:
代码2-32光盘\codes\第2章\2.6\switch.php
<?php $a = "sunyang"; switch($a){ //当变量为字符串时,使用swicth语句进行条件判断 case "changchun": echo "changchun"; break; case "sunyang": echo "sunyang<br>"; break; } $b = 66; switch($b){ //当变量为数字时,使用swicth语句进行条件判断 case 22: echo "22<br>";break; case 44: echo "4";break; default: echo "66";break; } ?>
在上面代码中给出了两个switch语句的应用示例,在第一个示例中表达式的值为字符串,而第二个示例中表达式的值为整型。该程序被执行时得到的结果如图2-42所示。
图2-42 switch语句的应用
Note
● 使用switch语句的时候default语句并不是必须有的。如果能够保证case语句的表达式能与switch指定表达式匹配,可以不加入default语句。
● 如果希望每个case语句执行完毕后跳出switch语句体,则必须加入“break”语句。否则某个case语句执行完毕后程序会继续向下遍历各case语句。
● 在有些编程语言中,switch语句表达式只能使用整型数字,而在PHP中还可以使用字符串。
2.6.3 while/ do…while循环语句
while和do…while语句都是用来处理循环流程的,while语句的应用格式如下:
while (表达式) { 执行语句; }
do…while语句的应用格式如下:
do { 执行语句; } while (表达式);
这两条语句的区别在于:while语句会先判断表达式是否成立,如果成立则执行while语句体内的代码,否则跳出循环;而do…while语句则是先执行do语句体内的代码然后再去判断表达式是否成立,如果成立则继续下次循环,否则跳出循环。while和do…while语句的执行流程如图2-43所示。
图2-43 while和do…while语句的执行流程
由于这两条语句用法非常相似,这里我们只给出应用while语句的示例代码如下:
代码2-33光盘\codes\第2章\2.6\while.php
<?php $a = 0; while($a<5){ //当变量a的值大于或等于5时退出循环 $a=$a+1; //执行一次循环,变量a的值增加1 echo $a."<br>"; } ?>
该程序被执行时得到结果如图2-44所示。
图2-44 while语句的应用
2.6.4 for循环语句
在执行程序循环处理时,如果想要准确控制循环次数,可以使用for循环语句。该语句的应用格式为:
for (初始值;循环条件;执行操作){ 执行语句; }
由于使用for语句的时候指定了循环开始及结束的条件,因此我们能够控制循环次数。for语句执行的流程如图2-45所示。
图2-45 for语句的执行流程
应用for语句的示例代码如下:
代码2-34光盘\codes\第2章\2.6\for.php
<?php for($a=0;$a<5;$a++){ echo$a."<br>"; } ?>
该程序被执行时得到的结果如图2-46所示。
图2-46 for语句的应用
2.6.5 foreach循环语句
在PHP中,foreach循环语句主要用于遍历数组,该语句的两种使用格式如下:
foreach(数组名称as$value){ //第一种方式 执行语句; } foreach(数组名称as$key=>$value){ //第二种方式 执行语句; }
第一种方式在遍历数组的时候,只是将数组元素的值赋给定义的变量value;而第二种方式除了将数组元素的值赋给变量value之外,还将数组元素的键名赋给变量key。在这里变量key和变量value的名称是可以任意命名的。应用foreach循环语句的代码如下:
代码2-35光盘\codes\第2章\2.6\foreach.php
<?php $number = array("one"=>"1","two"=>"2","three"=>"3"); foreach($number as$var){ //foreach的第一种方式 echo $var."<br>"; } foreach($number as$num_key=>$num_value){ //foreach的第二种方式 echo $num_key." is ".$num_value."<br>"; } ?>
该程序被执行时得到的结果如图2-47所示。
图2-47 foreach语句的应用
2.6.6 break跳转语句
break跳转语句用于中断循环执行流程。对于没有设置循环条件的循环语句,可以在语句任意位置加入break语句结束循环。在多层循环嵌套的时候,还可以通过break后面加上一个整型数字n,终止当前循环体向外计算的n层循环。应用break语句的示例代码如下:
代码2-36光盘\codes\第2章\2.6\break.php
<?php for($a=1;$a<=5;$a++){ //第一个双重循环语句 for ($b=1;$b<=5;$b++){ echo $a.$b."<br>"; break; } } echo "<br>"; for($a=1;$a<=5;$a++){ //第二个双重循环语句 for ($b=1;$b<=5;$b++){ echo $a.$b."<br>"; break 2; } } ?>
在上面代码中,我们分别定义了两个双重循环语句。在第一个双重循环中,当执行到内层循环时由于break语句的作用,将直接跳出内层循环而执行外层循环;在第二个双重循环中,当执行到内层循环时由于语句“break 2”指定了终止两层循环,所以内层循环和外层循环都被终止。当该程序被执行的时候输出结果如图2-48所示。
图2-48 break语句的应用
2.6.7 continue跳转语句
continue跳转语句用于跳过本次循环中后面的代码并进入下一次循环。在多重循环中,可以像使用break一样可以为continue语句指定一个整型数据,告诉程序跳过几重循环中continue语句后面的代码。应用continue语句的示例代码如下:
代码2-37光盘\codes\第2章\2.6\continue.php
<?php for ($a=1;$a<=5;$a++){ echo "开始第".$a."次循环<br>"; continue; echo $a."<br>"; } ?>
当该程序被执行时得到结果如图2-49所示。
图2-49 continue语句的应用
观察这个结果我们发现,每次循环时并没有输出变量a的值。这是因为我们加入了continue语句,所以其后代码将不会被执行。