PHP从入门到精通(第5版)
上QQ阅读APP看书,第一时间看更新

4.1 条件控制语句

条件控制语句主要有if、if…else、elseif和switch 4种。下面分别来了解和使用。

4.1.1 if语句

几乎所有的语言(包括PHP)都有if语句,它按照条件选择执行不同的代码片段。PHP的if语句的格式如下:

    if (表达式)
       语句 ;

如果表达式的值为真,那么就顺序执行语句;否则,就会跳过该条语句,再往下执行。如果需要执行的语句不止一条,那么可以使用“{ }”,在“{ }”中的语句被称为语句组,其格式如下:

    if(表达式){
        语句1;
        语句2;
        …
    }

if语句的流程控制图如图4.1所示。

图4.1 if语句的流程控制图

【例4.1】本例首先使用rand()函数生成一个随机数$num,然后判断这个随机数是不是偶数,如果是,则输出结果。实例代码如下:(实例位置:资源包\TM\sl\4\1

    <?php
        $num = rand(1,31);              //使用rand()函数生成一个随机数
        if ($num % 2 == 0){             //判断变量$num是否为偶数
             echo "\$num = $num";       //如果为偶数,输出表达式和说明文字
             echo "<br>$num 是偶数。";
        }
    ?>

运行结果如图4.2所示。

图4.2 if语句的执行结果

说明

rand()函数的作用是取得一个随机的整数,该函数的格式如下:

int rand(int min, int max)

rand()函数返回min~max的一个随机数。如果没有参数,则返回0~RAND_MAX的随机整数。

4.1.2 if…else语句

大多时候,总是需要在满足某个条件时执行一条语句,而在不满足该条件时执行其他语句。这时可以使用else语句,该语句的格式如下:

    if(表达式){
        语句1;
    }else{
        语句2;
    }

该语句的含义为:当表达式的值为真时,执行语句1;如果表达式的值为假,则执行语句2。if…else语句的流程控制图如图4.3所示。

图4.3 if…else语句的流程控制图

【例4.2】本例以例4.1为基础,首先使用rand()函数生成一个随机数$num,然后判断这个随机数是偶数还是奇数,再根据不同结果显示不同的字符串。实例代码如下:(实例位置:资源包\TM\sl\4\2

    <?php
        $num = rand(1,31);             //使用rand()函数生成一个随机数
        if ($num % 2 == 0){            //判断变量$num是否为偶数
             echo "变量$num是偶数。";  //如果为偶数
        }else {
             echo "变量$num为奇数。";  //如果为奇数
        }
    ?>

结果为:变量17为奇数

4.1.3 elseif语句

if…else语句只能选择两种结果:要么执行真,要么执行假。但有时会出现两种以上的选择,例如:一个班的考试成绩,如果是90分以上,则为“优秀”;如果是60~90分,则为“良好”;如果低于60分,则为“不及格”。这时可以使用elseif(也可以写作else if)语句来执行,该语句的格式如下:

    if(表达式1){
        语句1;
    }else if(表达式2){
        语句2;
    }…
    else{
        语句n;
    }

elseif语句的流程控制图如图4.4所示。

图4.4 elseif语句的流程控制图

【例4.3】本例通过elseif语句,判断今天是否为这个月的上、中、下旬。实例代码如下:(实例位置:资源包\TM\sl\4\3)

    <?php
        $month = date("n");                                     //设置月份变量$month
        $today = date("j");                                     //设置日期变量$today
        if ($today >= 1 and $today <= 10){                      //判断日期变量是否在1~10
             echo "今天是".$month."月".$today."日,是本月上旬"; //如果是,说明是上旬
        }elseif($today > 10 and $today <= 20){                  //否则判断日期变量是否在11~20
             echo "今天是".$month."月".$today."日,是本月中旬"; //如果是,说明是中旬
        }else{                                                  //如果上面两个判断都不符合要求,则输出默认值
             echo "今天是".$month."月".$today."日,是本月下旬"; //说明是本月的下旬
        }
    ?>

结果为:今天是6月10日,是本月上旬

注意

if语句和elseif语句的执行条件是表达式的值为真,而else执行条件是表达式的值为假。这里的表达式的值不等于变量的值。如:

    <?php
        $boo = false;
        if($boo == false)
             echo "true";
        else
             echo "false";
    ?>

该代码段的执行结果为:true

4.1.4 switch语句

虽然elseif语句可以进行多重选择,但使用时十分烦琐。为了避免if语句过于冗长,提高程序的可读性,可以使用switch分支控制语句。switch语句的语法格式如下:

    switch(变量或表达式){
        case 常量表达式1:
             语句1;
             break;
        case 常量表达式2:
        …
        case 常量表达式n:
             语句n;
             break;
    default:
             语句n+1;
    }

switch语句根据变量或表达式的值,依次与case中的常量表达式的值相比较,如果不相等,继续查找下一个case;如果相等,就执行对应的语句,直到switch语句结束或遇到break为止。一般来说,switch语句最终都有一个默认值default,如果在前面的case中没有找到相符的条件,则输出默认语句,和else语句类似。

switch语句的流程控制图如图4.5所示。

图4.5 switch语句的流程控制图

【例4.4】本例中应用switch语句设计网站的布局,将网站头、尾文件设置为固定不变的板块,导航条也作为固定板块,而在主显示区中,应用switch语句根据超链接中传递的值不同,显示不同的内容。实例代码如下:(实例位置:资源包\TM\sl\4\4

    <?php
        switch(isset($_GET['lmbs'])?$_GET['lmbs']:""){      //获取超链接传递的变量
             case "最新商品":                               //判断如果变量的值等于“最新商品”
                  include "new.php";                        //则执行该语句
                  break;                                    //否则跳出循环
             case "热门商品":
                  include "jollification.php";
                  break;
             case "推荐商品":
                  include "commend.php";
                  break;
             case "订单查询":
                  include "order_form.php";
                  break;
             default:                                       //判断当该值等于空时,执行下面的语句
                  include "new.php";
                  break;
             }
    ?>
    <map name="Map" id="Map">
        <area shape="rect" coords="9,92,65,113" href="#" />
        <area shape="rect" coords="78,89,131,115" href="index.php?lmbs=<?php echo urlencode("最新商品");?>" />
        <area shape="rect" coords="145,92,201,114" href="index.php?lmbs=<?php echo urlencode("推荐商品");?>" />
        <area shape="rect" coords="212,91,268,114" href="index.php?lmbs=<?php echo urlencode("热门商品");?>" />
        <area shape="rect" coords="474,93,529,113" href="index.php?lmbs=<?php echo urlencode("订单查询");?>" />
    </map>

运行结果如图4.6所示。

图4.6 switch多重判断语句

注意

在执行switch语句时,即使遇到符合要求的case语句段,也会继续往下执行,直到语句结束。为了避免这种浪费时间和资源的行为,一定要在每个case语句段后加上break语句。这里break语句的意思是跳出当前循环,在4.3.1节中将详细介绍break语句。