大道PHP
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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语句,所以其后代码将不会被执行。