从0到1学PHP(三):PHP 流程控制:掌控程序的走向

目录

  • [一、条件语句:程序的 "抉择路口"](#一、条件语句:程序的 “抉择路口”)
    • [1.1 if 语句家族:基础与进阶](#1.1 if 语句家族:基础与进阶)
    • [1.2 switch 语句:精准匹配的 "导航仪"](#1.2 switch 语句:精准匹配的 “导航仪”)
  • [二、循环语句:程序的 "重复舞步"](#二、循环语句:程序的 “重复舞步”)
    • [2.1 for 循环:有序的 "征程"](#2.1 for 循环:有序的 “征程”)
    • [2.2 while 与 do - while 循环:条件驱动的 "旋转门"](#2.2 while 与 do - while 循环:条件驱动的 “旋转门”)
    • [2.3 foreach 循环:数组遍历的 "特快列车"](#2.3 foreach 循环:数组遍历的 “特快列车”)
  • [三、跳转语句:程序流程的 "变奏曲"](#三、跳转语句:程序流程的 “变奏曲”)
    • [3.1 break 语句:循环与 switch 的 "急刹车"](#3.1 break 语句:循环与 switch 的 “急刹车”)
    • [3.2 continue 语句:循环的 "加速跳过键"](#3.2 continue 语句:循环的 “加速跳过键”)
  • [四、表达式:程序运算的 "基石"](#四、表达式:程序运算的 “基石”)
    • [4.1 表达式的组成:代码世界的 "积木"](#4.1 表达式的组成:代码世界的 “积木”)
    • [4.2 运算规则:表达式的 "游戏规则"](#4.2 运算规则:表达式的 “游戏规则”)

一、条件语句:程序的 "抉择路口"

在 PHP 编程的世界里,条件语句就像是程序的 "智慧大脑",赋予程序根据不同情况做出决策的能力。通过条件语句,我们可以让程序在不同的条件下执行不同的代码块,从而实现各种复杂的业务逻辑。接下来,我们就一同探索 PHP 中条件语句的奥秘。

1.1 if 语句家族:基础与进阶

if 语句是 PHP 中最基本的条件判断语句,它的基本形式如下:

php 复制代码
if (条件表达式) {
    // 当条件表达式为true时执行的代码
}

在这个结构中,条件表达式是一个返回布尔值(true 或 false)的表达式。如果条件表达式的结果为 true,那么大括号内的代码块将会被执行;如果为 false,代码块则会被跳过。例如,我们要判断一个人的年龄是否达到 18 岁(即是否成年),可以这样写:

php 复制代码
$age = 20;
if ($age >= 18) {
    echo "你已成年。";
}

在这个例子中,变量age的值为 20,age >= 18这个条件表达式的结果为 true,所以会输出 "你已成年。"。

if - else 语句是 if 语句的扩展,它提供了两种执行路径:当条件表达式为 true 时执行 if 代码块;当条件表达式为 false 时执行 else 代码块。其语法结构如下:

php 复制代码
if (条件表达式) {
    // 当条件表达式为true时执行的代码
} else {
    // 当条件表达式为false时执行的代码
}

比如,我们要判断一个学生的考试成绩是否及格(假设 60 分为及格线),代码可以这样实现:

php 复制代码
$score = 75;
if ($score >= 60) {
    echo "成绩及格。";
} else {
    echo "成绩不及格。";
}

这里,变量score的值为 75,score >= 60为 true,因此会输出 "成绩及格。"。如果$score的值小于 60,就会执行 else 代码块,输出 "成绩不及格。"。

if - elseif - else 语句则用于处理多个条件的情况。程序会按照从上到下的顺序依次检查 if 和各个 elseif 的条件表达式,一旦某个条件表达式为 true,就会执行对应的代码块,并跳过后续的条件判断。如果所有条件表达式都为 false,则执行 else 代码块。其语法如下:

php 复制代码
if (条件表达式1) {
    // 当条件表达式1为true时执行的代码
} elseif (条件表达式2) {
    // 当条件表达式2为true时执行的代码
} elseif (条件表达式3) {
    // 当条件表达式3为true时执行的代码
} else {
    // 当所有条件表达式都为false时执行的代码
}

以学生成绩等级评定为例,假设 90 分及以上为 "优秀",80 - 89 分为 "良好",70 - 79 分为 "中等",60 - 69 分为 "及格",60 分以下为 "不及格",代码可以写成:

php 复制代码
$score = 85;
if ($score >= 90) {
    echo "成绩等级为:优秀";
} elseif ($score >= 80) {
    echo "成绩等级为:良好";
} elseif ($score >= 70) {
    echo "成绩等级为:中等";
} elseif ($score >= 60) {
    echo "成绩等级为:及格";
} else {
    echo "成绩等级为:不及格";
}

在这个示例中,score的值为 85,首先判断score >= 90为 false,接着判断$score >= 80为 true,所以会输出 "成绩等级为:良好",并跳过后面的 elseif 和 else 代码块。

1.2 switch 语句:精准匹配的 "导航仪"

switch 语句也是一种多分支选择语句,它根据一个表达式的值来选择执行不同的代码块。其语法结构如下:

php 复制代码
switch (表达式) {
    case 值1:
        // 当表达式的值等于值1时执行的代码
        break;
    case 值2:
        // 当表达式的值等于值2时执行的代码
        break;
    case 值3:
        // 当表达式的值等于值3时执行的代码
        break;
    default:
        // 当表达式的值不等于任何一个case的值时执行的代码
        break;
}

在 switch 语句中,表达式会被计算一次,然后与各个 case 后面的值进行比较。如果找到匹配的值,就会执行该 case 下的代码块,直到遇到break语句,break语句用于终止 switch 语句的执行,防止继续执行下一个 case 的代码。如果没有找到匹配的值,且存在 default 分支,则会执行 default 下的代码块。

例如,我们根据一个数字来判断是星期几(假设 1 代表星期一,2 代表星期二,以此类推),代码如下:

php 复制代码
$day = 3;
switch ($day) {
    case 1:
        echo "星期一";
        break;
    case 2:
        echo "星期二";
        break;
    case 3:
        echo "星期三";
        break;
    case 4:
        echo "星期四";
        break;
    case 5:
        echo "星期五";
        break;
    case 6:
        echo "星期六";
        break;
    case 7:
        echo "星期日";
        break;
    default:
        echo "无效的输入";
        break;
}

这里,$day的值为 3,与 case 3 匹配,所以会输出 "星期三",然后遇到break语句,结束 switch 语句的执行。

switch 语句与 if 语句有一定的区别。switch 语句通常适用于对一个固定值进行等值匹配的情况,它的结构更加清晰,执行效率在某些情况下可能更高,因为它直接根据表达式的值跳转到对应的 case 分支。而 if 语句则更加灵活,不仅可以进行等值判断,还适合用于范围判断(如成绩等级评定中的分数范围判断)或复杂的条件组合判断。例如,判断一个数是否在某个区间内,使用 if 语句会更加方便:

php 复制代码
$num = 50;
if ($num >= 30 && $num <= 70) {
    echo "数字在30到70之间";
}

这种范围判断用 switch 语句来实现就会比较繁琐。所以在实际编程中,我们需要根据具体的需求来选择使用 if 语句还是 switch 语句,以达到最佳的编程效果。

二、循环语句:程序的 "重复舞步"

循环语句是 PHP 编程中实现代码重复执行的重要工具,它能够让程序在满足特定条件的情况下,反复执行一段代码块,大大提高了编程效率和代码的简洁性。在 PHP 中,常见的循环语句有 for 循环、while 循环、do - while 循环和 foreach 循环,它们各自适用于不同的场景,下面我们就来详细了解一下。

2.1 for 循环:有序的 "征程"

for 循环是一种非常常用的循环结构,特别适用于已知循环次数的情况。它的语法结构如下:

php 复制代码
for (初始化表达式; 条件表达式; 递增/递减表达式) {
    // 循环体代码
}

在这个结构中,初始化表达式在循环开始前执行一次,通常用于初始化循环变量;条件表达式在每次循环开始时进行判断,如果为 true,则执行循环体代码,否则结束循环;递增/递减表达式在每次循环体代码执行结束后执行,用于更新循环变量,控制循环的次数。

例如,我们要遍历一个包含数字 1 到 5 的数组,并输出每个元素,代码可以这样写:

php 复制代码
$numbers = array(1, 2, 3, 4, 5);
for ($i = 0; $i < count($numbers); $i++) {
    echo $numbers[$i]. " ";
}

在这个例子中,首先定义了一个数组numbers,然后使用 for 循环进行遍历。i = 0是初始化表达式,将循环变量i初始化为 0;i < count(numbers)是条件表达式,判断i是否小于数组的长度,只要满足这个条件,就会执行循环体;i++是递增表达式,每次循环结束后将i的值加 1。循环体中的echo numbers\[i]. " ";用于输出数组中的每个元素。

for 循环还常用于实现计数功能。比如,我们要计算从 1 到 100 的整数之和,可以这样实现:

php 复制代码
$sum = 0;
for ($i = 1; $i <= 100; $i++) {
    $sum += $i;
}
echo "1到100的和为:". $sum;

这里,sum用于存储累加的结果,初始值为 0。在 for 循环中,从 1 开始,每次循环将i的值累加到sum中,直到i大于 100 时,循环结束,此时$sum中存储的就是 1 到 100 的和。通过 for 循环,我们可以轻松地完成按指定次数重复执行任务的编程需求,无论是遍历数组、计算数值,还是生成特定的序列,它都能发挥重要作用。

2.2 while 与 do - while 循环:条件驱动的 "旋转门"

while 循环是一种条件循环,只要指定的条件为 true,就会不断执行循环体中的代码。它的语法形式如下:

php 复制代码
while (条件表达式) {
    // 循环体代码
}

在 while 循环中,程序首先判断条件表达式的值,如果为 true,则执行循环体代码,执行完循环体后再次判断条件表达式,如此反复,直到条件表达式为 false 时,循环结束。

例如,我们使用 while 循环来计算 1 到 100 的和,代码如下:

php 复制代码
$i = 1;
$sum = 0;
while ($i <= 100) {
    $sum += $i;
    $i++;
}
echo "1到100的和为:". $sum;

在这个例子中,先初始化变量i为 1,sum为 0。然后在 while 循环中,判断i是否小于等于 100,如果是,则将i累加到sum中,并将i加 1。不断重复这个过程,直到$i大于 100,此时循环结束,输出 1 到 100 的和。

do - while 循环与 while 循环类似,但有一个重要的区别:do - while 循环会先执行一次循环体,然后再判断条件表达式。其语法结构如下:

php 复制代码
do {
    // 循环体代码
} while (条件表达式);

由于先执行循环体,所以无论条件表达式一开始是否为 true,循环体至少会被执行一次。

比如,我们用 do - while 循环来实现一个简单的菜单输出程序,让用户输入选项,直到输入正确的退出选项为止,代码如下:

php 复制代码
do {
    echo "请选择操作:\n";
    echo "1. 查看信息\n";
    echo "2. 修改信息\n";
    echo "3. 退出\n";
    $choice = readline("请输入你的选择:");
    switch ($choice) {
        case '1':
            echo "你选择了查看信息\n";
            break;
        case '2':
            echo "你选择了修改信息\n";
            break;
        case '3':
            echo "你选择了退出\n";
            break;
        default:
            echo "无效的选择,请重新输入\n";
    }
} while ($choice!= '3');

在这个程序中,首先会输出菜单,让用户输入选择。无论用户第一次输入什么,菜单都会至少显示一次。然后根据用户的输入进行相应的操作,并再次判断用户输入是否为 '3',如果不是,则继续循环,再次显示菜单让用户输入,直到用户输入 '3' 为止。

通过 while 和 do - while 循环的对比可以看出,while 循环适用于在执行循环体之前需要先判断条件的情况;而 do - while 循环则适用于需要先执行一次循环体,再根据条件决定是否继续循环的场景 。在实际编程中,我们需要根据具体的需求来选择合适的循环结构。

2.3 foreach 循环:数组遍历的 "特快列车"

foreach 循环是 PHP 中专门用于遍历数组的循环结构,它提供了一种简洁、高效的方式来访问数组中的每个元素。其语法有两种形式,一种用于遍历普通数组,获取数组的值:

php 复制代码
foreach ($array as $value) {
    // 循环体代码,$value为当前数组元素的值
}

另一种用于遍历关联数组或同时获取普通数组的键和值:

php 复制代码
foreach ($array as $key => $value) {
    // 循环体代码,$key为当前数组元素的键,$value为当前数组元素的值
}

例如,我们有一个关联数组,存储了一个人的信息,包括姓名、年龄和城市,使用 foreach 循环来遍历并输出这些信息,代码如下:

php 复制代码
$person = array("name" => "张三", "age" => 25, "city" => "北京");
foreach ($person as $key => $value) {
    echo $key. ":". $value. "<br>";
}

在这个例子中,person是一个关联数组。通过 foreach 循环,key依次取到数组的键("name"、"age"、"city"),$value依次取到对应键的值("张三"、25、"北京"),然后在循环体中输出键值对信息。

如果是普通数组,我们可以使用第一种语法形式来遍历。比如有一个存储了学生成绩的数组,要输出每个学生的成绩:

php 复制代码
$scores = array(85, 90, 78, 92, 88);
foreach ($scores as $score) {
    echo "学生成绩:". $score. "<br>";
}

这里,score会依次取到数组scores中的每个元素值,即每个学生的成绩,并输出。

foreach 循环在遍历数组时非常方便,不需要像 for 循环那样手动控制索引,减少了出错的可能性,同时代码也更加简洁易读。无论是处理简单的一维数组,还是复杂的多维数组,foreach 循环都能轻松胜任,是 PHP 数组遍历的首选工具之一 。

三、跳转语句:程序流程的 "变奏曲"

在 PHP 程序的执行过程中,跳转语句就像是神奇的 "魔法棒",能够改变程序的执行顺序,让代码的执行更加灵活和高效。跳转语句主要包括 break 语句和 continue 语句,它们在循环和 switch 语句中发挥着重要的作用,接下来我们就详细了解一下这两种跳转语句。

3.1 break 语句:循环与 switch 的 "急刹车"

break 语句的主要作用是终止当前循环或者 switch 语句的执行,并将程序的控制权转移到被终止语句之后的下一条语句。在循环中,当满足特定条件时,使用 break 语句可以立即结束循环,不再执行循环体中剩余的代码;在 switch 语句中,break 语句用于跳出 switch 结构,避免执行多余的 case 分支。

在 for 循环中查找数组中是否存在特定元素,如果找到则终止循环,示例代码如下:

php 复制代码
$numbers = array(10, 20, 30, 40, 50);
for ($i = 0; $i < count($numbers); $i++) {
    if ($numbers[$i] == 30) {
        echo "找到了元素30";
        break;
    }
}

在这个例子中,当numbers\[i]的值等于 30 时,break语句被执行,循环立即终止,不再继续遍历数组后面的元素。

在 switch 语句中,当匹配到相应的 case 时,使用 break 语句跳出 switch 结构,示例代码如下:

php 复制代码
$dayOfWeek = 3;
switch ($dayOfWeek) {
    case 1:
        echo "星期一";
        break;
    case 2:
        echo "星期二";
        break;
    case 3:
        echo "星期三";
        break;
    case 4:
        echo "星期四";
        break;
    case 5:
        echo "星期五";
        break;
    case 6:
        echo "星期六";
        break;
    case 7:
        echo "星期日";
        break;
    default:
        echo "无效的输入";
        break;
}

这里,当$dayOfWeek的值为 3 时,匹配到 case 3,输出 "星期三",然后执行break语句,跳出 switch 语句,不再执行后面的其他 case 分支。

3.2 continue 语句:循环的 "加速跳过键"

continue 语句的作用是跳过当前循环中剩余的代码,直接开始下一次循环迭代。它不会终止整个循环,只是跳过本次循环中continue语句后面的部分,然后回到循环的开头,重新判断循环条件,决定是否继续执行下一次循环。

例如,在一个 for 循环中,我们要输出 1 到 10 之间的奇数,可以使用 continue 语句跳过偶数,示例代码如下:

php 复制代码
for ($i = 1; $i <= 10; $i++) {
    if ($i % 2 == 0) {
        continue;
    }
    echo $i. " ";
}

在这个循环中,当i是偶数时,if (i % 2 == 0)条件成立,执行continue语句,跳过echo i. " ";这行代码,直接进入下一次循环,即i自增后再次判断循环条件,只有当i为奇数时,才会输出i的值。最终输出的结果为 "1 3 5 7 9" 。通过continue语句,我们可以在循环中灵活地控制哪些代码需要执行,哪些需要跳过,使得程序能够更加精准地满足我们的业务需求 。

四、表达式:程序运算的 "基石"

4.1 表达式的组成:代码世界的 "积木"

表达式是 PHP 程序中进行各种运算和操作的基本单元,它就像是代码世界中的 "积木",通过不同的组合方式构建出丰富多彩的程序逻辑。简单来说,表达式由操作数和运算符组成。操作数可以是常量、变量、函数调用的返回值等,它代表了参与运算的数据;运算符则定义了对操作数进行的具体运算操作。

在 PHP 中,常见的运算符包括算术运算符(如 +、-、、/、%)、比较运算符(如 ==、!=、>、<、>=、<=)、逻辑运算符(如 &&、||、!)、赋值运算符(如 =、+=、-=、=、/= 等)以及其他一些特殊运算符。

例如,一个简单的数学运算表达式a + b,其中a和b是操作数,这里假设它们是已定义的变量,存储了具体的数值,+是算术运算符,表示加法运算,该表达式的作用是将a和b的值相加。

再比如条件判断表达式age \>= 18,age是操作数,代表一个人的年龄,>=是比较运算符,用于比较$age的值是否大于或等于 18,这个表达式会返回一个布尔值(true 或 false),可以用于条件语句中进行逻辑判断。

4.2 运算规则:表达式的 "游戏规则"

当编写复杂的表达式时,需要遵循一定的运算规则,这些规则决定了表达式中各个部分的计算顺序,就如同游戏规则一样,确保程序能够正确地执行运算。表达式的运算规则主要涉及运算符的优先级和结合性。

运算符优先级定义了不同运算符在表达式中的运算先后顺序。优先级高的运算符会先进行运算,优先级低的运算符后进行运算。例如,在算术运算中,乘法和除法的优先级高于加法和减法。所以在表达式3 + 4 * 2中,先计算4 * 2,得到 8,然后再计算3 + 8,最终结果为 11。

运算符的结合性则规定了在优先级相同的情况下,运算符的计算方向。结合性分为左结合性和右结合性。左结合性表示从左到右依次计算,例如加法和减法运算符是左结合性,在表达式10 - 5 + 3中,先计算10 - 5得到 5,再计算5 + 3,结果为 8;右结合性表示从右到左依次计算,例如赋值运算符是右结合性,在表达式a = b = 10中,先将 10 赋值给b,然后再将b的值(也就是 10)赋值给$a。

以下是一个更复杂的数学表达式计算示例,展示运算顺序和规则的应用:

php 复制代码
$a = 2;
$b = 3;
$c = 4;
$result = ($a + $b) * $c / ($a + $c);
echo $result; 

在这个例子中,首先计算括号内的表达式,即a + b得到 5,a + c得到 6;然后按照先乘除后加减的优先级顺序,计算乘法5 * $c得到 20;最后计算除法20 / 6,得到结果约为 3.33(实际结果根据 PHP 的浮点数精度表示)。通过合理运用运算符的优先级和结合性规则,我们能够准确地控制表达式的计算过程,实现各种复杂的数学运算和逻辑判断,为 PHP 程序的功能实现提供坚实的基础。

相关推荐
深海潜水员19 分钟前
【Python】 切割图集的小脚本
开发语言·python
Yolo566Q1 小时前
R语言与作物模型(以DSSAT模型为例)融合应用高级实战技术
开发语言·经验分享·r语言
Felven1 小时前
C. Challenging Cliffs
c语言·开发语言
Dreamsi_zh2 小时前
Python爬虫02_Requests实战网页采集器
开发语言·爬虫·python
_君落羽_3 小时前
C语言 —— 指针(4)
c语言·开发语言
weixin_448617053 小时前
疏老师-python训练营-Day30模块和库的导入
开发语言·python
望星空听星语3 小时前
C语言自定义数据类型详解(四)——联合体
c语言·开发语言
壹立科技4 小时前
Java源码构建智能名片小程序
java·开发语言·小程序
chen_note4 小时前
LAMP及其环境的部署搭建
linux·运维·mysql·php·apache·lamp·phpmyadmin
小小李程序员4 小时前
JSON.parse解析大整数踩坑
开发语言·javascript·json