从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 程序的功能实现提供坚实的基础。

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端