阿里云新用户优惠

第三章 PHP流程控制结构

一、分支结构

掌握分支结构的方法

1、单向条件分支if

if 语句是流程控制中最简单的一种。只判断某个条件是否为真,如果为真就执行特定的语句块。
语法格式如下:
if (判断条件) {
  语句块;
}

例子

<?php
    $a = true;
    $b = false;
    if($a){
        echo "变量a的值是真";
    }
    if($b){
        echo "变量b的值是假";
    }
    //请问下面这句话会执行吗?
    if($b == false){
        echo "变量b的值是假";
    }
?>

2、双向条件分支else从句

if...else...else语句是if语句的从句,必须和if一起使用,不能单独存在。
语法格式如下:
if (判断条件) {
  语句块 1;
} else {
  语句块 2;
}

例子

<?php
    $x = 30;
    $y = 20;
    if($x > $y){
        echo "变量\$x大于变量\$y<br/>";
    } else {
        echo "变量\$x小于变量\$y<br/>";
    }
    echo "变量\$x和变量\$y,比较完毕。<br/>";
?>

3、多向条件分支elseif 子句

if...else if...else 语句,else if 语句和 else 语句一样,它延伸了 if 语句,else if 语句会根据不同的表达式来确定执行哪个语句块。 在 PHP 中也可以将 else if 这两个关键字合并在一起(如 elseif)来使用。
语法格式如下:
if (判断条件 1) {
  语句块 1;
} else if (判断条件 2) {
  语句块 2;
} else if (判断条件 3) {
  语句块 3;
}
……
else if (判断条件 n) {
  语句块 n;
}
else{
  语句块 n+1;
}

在 else if 语句中同时只能有一个表达式为 TRUE,即在 else if 语句中只能有一个语句块被执行。 如果有多个表达式的值为 TRUE 时,只会执行第一个表达式所对应的语句块。
if…else if…else 语句的执行流程如下图所示:

<?php
    $score = 89; 
    if ($score > 90) {
        echo '成绩的级别为:优!';
    } else if ($score > 70) {
        echo '成绩的级别为:良!';
    } else if ($score > 60) {
        echo '成绩的级别为:中!';
    } else {
        echo '成绩的级别为:差!';
    }
?>

4、switch 语句

switch 语句由一个表达式和多个 case 标签组成,case 标签后紧跟一个代码块,case 标签作为这个代码块的标识。
语法格式如下:
switch(表达式){
  case 值 1:
    语句块 1;
    break;
  case 值 2:
    语句块 2;
    break;
… …
  case 值 n:
    语句块 n;
    break;
  default:
    语句块 n+1;
}

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

在使用 switch 语句时应该注意以下几点:

  • switch 语句后面表达式的数据类型只能是整型或字符串,不能是 bool 型。
  • switch 语句后面的花括号是必须有的。
  • case 语句的个数没有规定,可以无限增加。但 case 标签和 case 标签后面的值之间应该有一个空格,值后面必须有一个冒号,这是语法的一部分。
  • switch 匹配完成以后,将依次逐条执行匹配的分支模块中的语句,直到 switch 结构结束或者遇到了 break 语句才停止执行。所以,如果一个分支语句的后面没有写上 break 语句,程序将会继续执行下一个分支语句的内容。
  • switch 语句中 default 标签直接在后面加上一个冒号,看似没有条件,其实是有条件的,条件就是“表达式”的值不能与前面任何一个 case 标签后的值相等,这时才执行 default 分支中的语句。default 标签不是 switch 语句中必需的,可以省略。
<?php
    $week = date('D');
    switch($week){
        case 'Mon':
            echo '星期一';
            break;
        case 'Tue':
            echo '星期二';
            break;
        case 'Wed':
            echo '星期三';
            break;
        case 'Thu':
            echo '星期四';
            break;
        case 'Fri':
            echo '星期五';
            break;
        case 'Sat':
            echo '星期六';
            break;
        case 'Sun':
            echo '星期日';
            break;
    }
?>

二、循环结构

掌握循环结构的使用

1、while循环

while 循环的作用是反复执行某一项操作,是循环语句中最简单的一个。该语句的特点是:先判断表达式,当表达式结果为真时执行相应的语句。
语法格式如下:
while (表达式) {
  语句块;
} 当表达式的值为真时,将执行循环体内的 PHP 语句块,执行结束后,再返回到表达式继续进行判断,判断为真时继续执行语句块中的代码,直到表达式的值为假时才跳出循环。
执行过程如下图所示:

<?php
    $num = 1;
    while($num <= 10) {
        echo $num.($num == 10 ? '' : ', ');
        $num++;
    }
?>

2、do-while循环

do while 和 while 循环非常相似,区别在于 do while 循环的表达式是在每次循环结束时检查而不是在开始时。do while的循环语句必定会执行一次。
执行流程如下图所示:

<?php 
    $count = 0;
    do {
        echo $count;
        $count++;
    }
    while ($count < 10);
?>

3、for循环

for 循环语句能够按照已知的循环次数进行循环操作,适用于明确知道执行次数的情况。
语法格式如下:
for (初始化表达式; 条件判断; 变量更新) {
  循环体;
}

参数说明如下:

  • 初始化表达式:通常用于声明一个计数器的初始值,即循环开始的值;
  • 条件判断:用于控制是否执行循环体中的代码,如果条件为 FALSE ,则立即退出循环;
  • 变量更新:循环每执行一次,马上修改计数器的值;
  • 循环体:条件判断为真时,需要执行的若干代码。

执行流程如下图所示:

<?php
    for( $i= 1;$i<= 10;$i++ ){
        echo "这是第<b> $i </b>次循环执行输出的结果<br>";        
    }
?>

for 循环语句也可以像 while 语句一样嵌套使用,即在 for 循环语句中包含另外的一个或多个 for 循环语句。通过对 for 循环语句进行嵌套,可以完成一些复杂的编程。比如打印九九乘法表,示例代码如下:

<?php
    for ($i = 1; $i <= 9; $i++) {
        for ($j = 1; $j <= $i; $j++) {
            echo $j.' * '.$i.' = '.$i*$j.'&nbsp;&nbsp;';
        }
        echo '<br>';
    }
?>

注意:for (;;)没有条件判断终止语句时,是无限循环。

4、foreach循环

foreach 循环结构是遍历数组时常用的方法,foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量或者未初始化的变量将发出错误信息。
两种语法格式:

<?php
    //格式1
    foreach (array_expression as $value){
        //statement
    }

    //格式2
    foreach (array_expression as $key => $value){
        //statement
    }
?>

第一种格式遍历 array_expression 数组时,每次循环将数组的值赋给 $value;第二种遍历不仅将数组值赋给 $value,还将键名赋给 $key。

举例演示两种格式的不同:

<?php
    $array = [0, 1, 2];
    foreach ($array as $val){
        echo "值是:" . $val ;
        echo "<br/>";
    }
    foreach ($array as $key => $value) {
        echo "键名是:" . $key . "值是:" . $value;
        echo "<br/>";
    }
?>

三、流程控制符

掌握流程控制符的使用

1、break语句

break 关键字可以使程序跳出当前的循环,可以在 switchforwhiledo...while 等语句中使用,这样可以终止循环体的代码并立即跳出当前的循环,执行循环之后的代码。

break 关键字的执行流程如下图所示:

例子

<?php
    while (true) {
        $num = rand(1, 20);
        echo $num.', ';
        if ($num == 10) {
            echo '$num = 10,退出循环!<br>';
            break;
        }
    }
    echo '成功退出 while 循环!';
?>

break 语句不仅可以跳出当前的循环,还可以指定跳出几层循环。语法格式为:break n; 其中,参数 n 指定要跳出的循环层数,如下图所示:

例子

<?php
    while (true) {
        for (;;) {
            for ($i=0; $i < 10; $i++) {
                echo '$i = '.$i.', <br>';
                if($i == 3) {
                    echo '变量 $i 等于 3,跳出第一层循环。<br>';
                    break 1;
                }
            }
            for ($j=0; $j < 10; $j++) {
                echo '$j = '.$j.', <br>';
                if($j == 4) {
                    echo '变量 $j 等于 4,跳出最外层循环。';
                    break 3;
                }
            }
        }
        echo '由于前面直接跳出了最外层循环,所以这里的打印信息是看不到的!';
    }
?>

2、 continue语句

continue 是用在循环结构中的,它可以控制程序放弃本次循环中 continue 语句之后的代码并进行下一次循环。continue 本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如 ifswitch 语句中)使用 continue,程序将会出错。
执行流程如下图所示:

例子

<?php
    for ($i = 1; $i <= 10; $i++) {
        if($i % 2 == 0) {
            continue;
        }
        echo '$i = '.$i.', <br>';
    }
?>

break 关键字相同,continue 也可以接受一个可选的数字参数来决定跳过几重循环的循环末尾,默认值是 1,即跳到当前循环的末尾。语法格式如下:continue n;

<?php
    $arr = array('A','B','C','D','E','F','G','H','I','J');
    for ($i=0; $i < 10; $i++) {
        echo '<br>';
        if($i % 2 == 0){
            continue;
        }
        for (;;) {
            for ($j=0; $j < count($arr); $j++) {
                if($j == $i){
                    continue 3;
                }else{
                    echo '$arr['.$j.'] = '.$arr[$j].' | ';
                }
            }
        }
        echo "由于前面跳出了循环,所以这句换无法打印出来!";
    }
?>

breakcontinue对比

<?php
//break
$tmpVar = [];
for($a = 1; $a++; $a<10){
    if($a == 2){
        break;
    }
    array_push($tmpVar, $a);
}
print_r($tmpVar);

//continue
$tmpVar = [];
for($a = 1; $a++; $a<10){
    if($a == 2){
        continue;
    }
    array_push($tmpVar, $a);
}
print_r($tmpVar);
?>

小结:continue 关键字和 break 关键字的区别在于,continue 关键字只是结束本次循环,而 break 关键字会终止整个循环的执行。

3、exit语句

die()exit() 函数的用法和作用是一样的,都可以输出一个消息并且退出当前程序。
其实 exitdie 这两个名字指向的是同一个函数,die()exit() 函数的别名。
语法格式如下:exit(message);die(message);

例子

<?php
    echo 'php基础学习<br>';
    exit('退出程序,不再向下执行!');
    echo 'http://www.php.net/';
?>

die() 函数的使用方法和 exit() 函数相同,示例代码如下:

<?php
    for ($i=0; $i < 10; $i++) {
        if ($i == 2) {
            die;
        } else {
            echo '$i = '.$i.'<br>';
        }
    }
    echo 'php基础学习<br>';
    echo 'http://www.php.net/';
?>

4、return语句

  • 在函数中调用return,将立即结束此函数的执行并将它的参数作为函数的值返回。
  • 在全局范围中点使用,则当前脚本文件中止运行。
  • 在循环体内使用return,将结束当前脚本的运行。
<?php
    //函数中使用return
    function demo(){
        echo "这是demo中的文字<br/>";
        return "这是demo返回值";
        echo "demo程序已退出,此处不会执行!";
    }

    echo demo()."<br>";

    for($i = 1; $i < 10; $i++){
        if($i > 5){
            return;
            echo "大于5,for程序已退出,此处不会执行!";
        }
        echo $i."<br>";
    }

    return;
    echo "程序已退出,此处不会执行!";
?>

四、包含文件操作

文件包含是指将另一个源文件的全部内容包含到当前源文件中进行使用,通常也称为引入外部文件。

  • include 包含文件发生错误时,如包含的文件不存在,脚本将发出一个警告,但脚本会继续运行
  • require 包含文件发生错误时,会产生一个致命错误并停止脚本的运行
  • include_once include_once 语句和 include 语句类似,唯一的区别就是如果包含的文件已经被包含过,就不会再次包含。include_once 可以确保在脚本执行期间同一个文件只被包含一次,以避免函数重定义、变量重新赋值等问题。
  • require_once require_once 语句和 require 语句类似,唯一的区别就是如果包含的文件已经被包含过,就不会再次包含。require_once 可以确保在脚本执行期间同一个文件只被包含一次,以避免函数重定义、变量重新赋值等问题。

例子

<?php
    echo "<p>Copyright©2021-".date("Y")."荆州理工职业学院</p>";
?>

在另一个页面中使用,可以使用include

<!DOCTYPE html>
<html lang="en">
<head>
    <title>荆州理工职业学院</title>
</head>
<body>
    <h1>欢迎访问我们的学校!</h1>
    <?php 
        include 'footer.php';
    ?>
</body>
</html>

五、综合案例

1、以下属于Web开发语言的有哪几种?供选答案:C语言、PHP、FLASH、ASP、JSP,正确答案是:PHP、ASP、JSP

<!DOCTYPE html>
<html lang="en">
<head>
    <title>流程控制案例</title>
</head>
<body>
    <form action="" method="post">
        以下属于web开发语言的有哪几种?<br>
        <input type="checkbox" name="answer[]" value="C语言">C语言<br>
        <input type="checkbox" name="answer[]" value="PHP">PHP<br>
        <input type="checkbox" name="answer[]" value="FLASH">FLASH<br>
        <input type="checkbox" name="answer[]" value="ASP">ASP<br>
        <input type="checkbox" name="answer[]" value="JSP">JSP<br>
        <input type="submit" name="bt_answer" value="提交">
    </form>
</body>
</html>
<?php
    if(isset($_POST["bt_answer"])){
        // var_dump($_POST["answer"]);
        $answers = $_POST["answer"];
        if(!is_array($answers)){
            echo "<script>alert('请选择答案')</script>";
            return;
        }
        $num = count($answers);
        $anw = "";
        for($i = 0; $i < $num; $i++){
            $anw .= $answers[$i];
        }
        // var_dump($anw);
        if($anw == "PHPASPJSP"){
            echo "<script>alert('回答正确!')</script>";
        } else {
            echo "<script>alert('回答错误!')</script>";
        }
    }
?>

2、计算累加器,计算从1开始到指定数字的累加和,指定数字由用户输入

<!DOCTYPE html>
<html lang="en">
<head>
    <title>计算累加器</title>
</head>
<body>
    <h1>计算累加器</h1>
    <form action="" method="POST">
        1+2+...+<input type="text" name="num" size="5">
        <input type="submit" name="submit" value="计算">
    </form>
</body>
</html>
<?php
    if(isset($_POST["submit"])){
        $num = $_POST["num"];
        $i = 0;
        $sum = 0;
        if($num <=2){
            echo "<script>alert('输入的数字必须大于2')</script>";
        } else {
            while($i <= $num){
                $sum += $i;
                $i++;
            }
            echo "<script>alert('1+2+...+$num = $sum')</script>";
        }
    }
?>

3、简单计算器,输入2个数字进行加减乘除计算

<?php
if (isset($_POST['submit'])) {
    echo "用户点击提交按钮,提交计算请求<br>";

    // 判断两个运算元是否为数字 如果不是数字 则不进行运算
    if (!is_numeric($_POST['num1']) || !is_numeric($_POST['num2'])) {
        $isDo = false;
        echo "其中一个运算元不是数字,不进行运算<br>";
    } else {
        $isDo = true;
    }

    // 声明变量 计算结果
    $sum = "";
    if ($isDo) { // 判断两个运算元是否为数字 如果不是数字 则不进行运算
        switch ($_POST['ysf']) {
            case '+':
                $sum = $_POST['num1'] + $_POST['num2'];
                break;
            case '-':
                $sum = $_POST['num1'] - $_POST['num2'];
                break;
            case '*':
                $sum = $_POST['num1'] * $_POST['num2'];
                break;
            case '/':
                $sum = $_POST['num1'] / $_POST['num2'];
                break;
            case '%':
                $sum = $_POST['num1'] % $_POST['num2'];
                break;
        }
        echo $sum . "<br>";
    }
} else {
    echo "用户刷新页面<br>";
}
?>
<html lang="en">
<head>
    <title>简易计算器</title>
</head>
<body>
    <form action="" method="POST">
        <fieldset>
            <legend>简易计算器</legend>
            <input type="text" size="5" name="num1" value="<?php if (isset($_POST['submit'])) { echo $_POST['num1']; } ?>">
            <select name="ysf">
                <option <?php if (isset($_POST['submit']) && $_POST['ysf'] == "+") { echo "selected"; } ?> value="+"> + </option>
                <option <?php if (isset($_POST['submit']) && $_POST['ysf'] == "-") { echo "selected"; } ?> value="-"> - </option>
                <option <?php if (isset($_POST['submit']) && $_POST['ysf'] == "*") { echo "selected"; } ?> value="*"> * </option>
                <option <?php if (isset($_POST['submit']) && $_POST['ysf'] == "/") { echo "selected"; } ?> value="/"> / </option>
                <option <?php if (isset($_POST['submit']) && $_POST['ysf'] == "%") { echo "selected"; } ?> value="%"> % </option>
            </select>
            <input type="text" size="5" name="num2" value="<?php if (isset($_POST['submit'])) { echo $_POST['num2']; } ?>">
            <input type="submit" name="submit" value="等于">
            <p>
                <?php
                    if (isset($_POST['submit'])) {
                        echo "计算结果:{$_POST['num1']}{$_POST['ysf']}{$_POST['num2']} = {$sum}";
                    }
                ?>
            </p>
        </fieldset>
    </form>
</body>
</html>

关注微信公众号,与我交流吧~

分享