1
2
3
4
5
6
7
8
9
10
11

流程控制语句

发布时间:2017-07-20 07:56   发布人:毛书朋   浏览次数:7586

PHP的流程控制之分支语句

PHP的流程控制之循环语句

关联课件:4子项目四 - 流程控制语句(点击在线预览)


4.3.5  流程控制语句

       几乎在所有的编程语言中,程序都由3种基本的结构组成,即顺序结构、分支结构和循环结构。

       程序是由若干语句组成的,如果程序中语句的执行顺序是从上到下依次逐句执行的,那么这个程序的结构就是顺序结构,在这种结构中没有分支和反复,这也是最简单、最常见的流程结构,这里就不再过多地讨论。

       PHP中提供了4条流程控制语句来实现分支结构和循环结构。

      ①if…else…            条件语句

      ②switch                   分支选择语句

      ③do…while…       循环语句

      ④for                         循环语句

      此外PHP还提供了break语句和continue语句,用以跳出分支结构或循环结构,下面对这些语句逐一进行详细的介绍。


4.3.5.1  分支控制语句 


一、if…else…语句

       if…else…语句共有3种基本结构,此外每种基本结构还可以嵌套另外两种结构,而且还允许多级嵌套。

      1. 只有if的语句

      这种结构可以当作单纯的判断,可解释成“若某条件成立则去做什么事情”,其语法如下:

if(expr){

            statement

}

       其中的expr为判断的条件表达式,通常都为比较表达式或逻辑表达式,而statement表示符合条件时执行的语句,若statement所代表的语句只有一行,可以省略大括号{}。如果expr为真,则执行statement语句或语句体。


2.if…else…语句

     这种结构可解释成“若某条件成立则去做什么事情,否则去做另一件事情”,其语法如下:

if(expr){

            statement1

}else{

            statement2

}

      如果expr为真,则执行statement1语句或语句体,否则执行statement2语句或语句体。


3. 包含else if的语句

     前面的两种分支结构只能实现二路分支,用包含else if的语句则可以实现多路分支,其语法如下:

if(expr1){

            statement1

}

else if(expr2){

            statement2

}

else if…

else{

statementn

}

      当expr1为真时,执行statement1语句或语句体,否则转入expr2的判断,如果expr2为真,则执行statement2语句或语句体,依此类推,如果所有的expr表达式都不为真,则执行statementn语句或语句体。

      程序4-18.php为if…else…语句应用示例.

<!--文件4-18.php:if…else…的应用-->
<HTML>
<HEAD>
    <TITLE>if…else…的应用</TITLE>
</HEAD>
<BODY>
    <?php
        //本程序测试时,请更改测试服务器的系统时间查看效果
        echo "今天是:".date("D")."<br>";
        if (date("D")=="Sat")
            echo "周末了,我们要去狂欢。<br>";
        if (date("D")=="Sat"){
            echo "再次声明,周末了,我们要去狂欢,好高兴!<br>";
        }else{
            echo "今天不是周末,我们要学习PHP 5,多么有意义啊!^_^!!!<br>";
        }
        if (date("D")=="Sun"){
            echo "今天是星期天。";
        }
        else if (date("D")=="Mon"){
            echo "今天是星期一。";
        }
        else if (date("D")=="Tue"){
            echo "今天是星期二。";
        }
        else if (date("D")=="Wed"){
            echo "今天是星期三。";
        }
        else if (date("D")=="Thu"){
            echo "今天是星期四。";
        }
        else if (date("D")=="Fri"){
            echo "今天是星期五。";
        }
        else{
            echo "今天是星期六(只可能是星期六了^_^)。";
        }
    ?>
</BODY>
</HTML>

程序4-18中的tate()函数是格式化服务器的时间函数,date("D")返回服务器时间的星期时间中的英文的前3个字符。当系统时间不为星期六时,其运行结果如图4-14所示.

4-14.jpg

图4-14  程序4-18.php的运行结果

        在上述3种基本结构中,如果在statement语句体中还有if…else…语句,就构成if…else…语句的嵌套。

二、switch语句

      嵌套的if…else…语句可以处理多分支流程,但使用起来比较繁琐而且也不太清晰,为此PHP中又引进了switch语句。其语法如下:

switch (expr) {

            case expr1:

                  statement1;

                  break;

            case expr2:

                  statement2;

                  break;

             ┆

             ┆

            default:

                  statementN;

                  break;

}

      其中的expr为条件,通常是变量名称。而case后的exprN,通常表示变量的值。冒号后则为符合该条件要执行的语句。一定要注意break的作用为退出switch结构,千万不能省略不写。具体使用如程序4-19.php所示。

<!--文件4-19.php:switch的应用-->
<HTML>
<HEAD>
    <TITLE>switch的应用</TITLE>
</HEAD>
<BODY>
    <?php
        //本程序测试时,请更改测试服务器的系统时间查看效果
        echo "今天是:".date("D")."<br>";
        switch (date("D")) {
            case "Mon":
            echo "今天星期一";
            break;
            case "Tue":
            echo "今天星期二";
            break;
            case "Wed":
            echo "今天星期三";
            break;
            case "Thu":
            echo "今天星期四";
            break;
            case "Fri":
            echo "今天星期五";
            break;
            default:
            echo "今天放假";
            break;
        }
    ?>
</BODY>
</HTML>

程序4-19.php的运行效果如图4-15所示。

4-15.jpg

图4-15  程序4-19.php的运行结果


通过比较,不难发现例4-19.php要比例4-18.php简单一些,最主要的是程序清晰。


4.3.5.2  循环控制语句 


一、do…while…语句

       在PHP中,do…while…循环语句有两种结构,一种只有while…部分,另一种是do…while…两部分都有。


1. 只有while…部分的语句

其语法如下:

while (expr) {

            statement

}


2.do…while…两部分都有的语句

其语法如下:

do {

            statement

} while (expr);

       其中的expr为判断的条件,通常为逻辑表达式或比较表达式。而statement为符合条件的执行部分程序,若程序只有一行,可以省略大括号{}。

      两种结构的区别在于:前者是先判断条件再执行语句,后者是先执行语句再判断条件。对于expr开始为真的情况,两种结构是没有区别的。如果expr开始为假,则前者不执行任何语句就跳出循环,而后者仍要执行一次循环才能跳出循环。

具体使用如程序4-20.php所示。

<!--文件4-20.php:do…while…的应用-->
<HTML>
<HEAD>
    <TITLE>do…while…的应用</TITLE>
</HEAD>
<BODY>
    <?php
        //本程序测试时,请将两处$i的初始值改为为4后再测试一次
        //观察结果,分析区别
        $i=1;
        while($i<=3){
            print $i  ;
            echo ". 以后不敢了<br> ";
        }
        echo "第二次……<br>";
        $i=1;
        do{
            print $i  ;
            echo ". 以后不敢了<br> ";
        } while($i<=3)
    ?>
</BODY>
</HTML>

由于网页解析的原因,页面无法显示两个加号,同学们在编写代码的时候要注意不要漏写。

其运行效果如图4-16所示。

4-16.jpg

图4-16  $i初值为1时,程序4-20.php的运行结果

4-16.2.jpg

图4-16  $i初值为4时,程序4-20.php的运行结果


       当我们把第10行和16行更改为“$i=4;”后,其运行效果如图4-16所示,这样就不难看出两种循环结构的区别了。


二、for语句

      for语句仅有单纯的一种,没有其他变化,但同时也是最复杂、功能最强大的循环语句任何while循环和do…while…循环都可以用for循环代替。For语句的语法如下:

for(expr1;expr2;expr3){

statement

}

     其中expr1为条件的初始值,expr2为判断的条件,通常都是用比较表达式或逻辑表达式作为判断的条件,expr3为执行statement后要执行的部分,即循环步长,可以用来改变条件,供下次的循环判断,如将循环变量加1、减1等。statement为符合条件后执行的语句或语句体,若statement只有一条语句组成,则可以省略大括号{}。

程序的主体部分可以用for循环改写如下:

<?php

for ($i=1;$i<=3;$i  ){

echo $i.". 以后不敢了<br>";

}

?>

当然还可以改写成以下几种形式:

<?php

$i=1;

       for (;$i<=10;$i  ){

         echo $i.". 以后不敢了<br>";

      }

?>

(由于网页解析的原因,页面无法显示两个加号,同学们在编写代码的时候要注意不要漏写。)

<?php

for ($i=1;;$i  ){

               if ($i>10)  break;    //循环标志结束,跳出循环

               echo $i.". 以后不敢了<br>";

           }

?>

<?php

for ($i=1;$i<=10;){

               echo $i.". 以后不敢了<br>";

               $i    ;

           }

?>

       可以明显地看出用for语句和用while语句的不同。实际应用上中,若循环有初始值,且循环过程中都要累加(或累减),则使用for循环比用while循环好。

由于网页解析的原因,页面无法显示两个加号,同学们在编写代码的时候要注意不要漏写。

4.3.5.3  break和continue语句


       在switch和for语句的例子中都用到了break语句,它的作用就是跳出整个switch分支结构或for循环结构,执行其下面的语句。而continue经常用在for或do…while…循环语句中,表示跳出本次循环,继续进入下一次循环。这也是break和continue的主要区别,如程序4-21.php所示。

<!--文件4-21.php:break/continue的应用-->
<HTML>
<HEAD>
    <TITLE>break/continue的应用</TITLE>
</HEAD>
<BODY>
    <?php
        echo"使用break的输出效果:<br>";
        $i=0;
        while ($i<10) {
            if ($i%2==1) {
                break;
            }
            echo $i;
            $i  ;
        }
        echo "<br>使用contine的输出效果:<br>";
        for($i=0;$i<10;$i  ){
            if ($i%2){
                continue;
            }
            echo $i."&nbsp;";
        }
    ?>
</BODY>
</HTML>

程序4-21.php运行结果如图4-18所示。

4-18.jpg

图4-18  程序4-21.php的运行结果



  • 赵博文 2018-01-07 16:00:48
    PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
  • 赵博文 2018-01-07 16:01:31
    switch 和第一个 case 之间的任何输出(含空格)将导致语法错误。例如,这样是无效的: <?php switch ($foo): ?> <?php case 1: ?> ... <?php endswitch ?>
  • 岳猛 2018-01-09 16:21:42
    看了视频才知道 PHP还提供了break语句和continue语句,用以跳出分支结构或循环结构 非常的实用
  • 甄丹丹 2018-01-09 16:23:49
    在switch和for语句的例子中都用到了break语句,它的作用就是跳出整个switch分支结构或for循环结构,执行其下面的语句。而continue经常用在for或do…while…循环语句中,表示跳出本次循环,继续进入下一次循环。这也是break和continue的主要区别
  • 魏德旺 2018-01-09 16:25:26
    逻辑性好强,