第6页 / 共40页

流程控制:条件分支与循环

程序不仅仅是自上而下的执行,它需要具备思考与重复劳动的能力。本页深入讲解 PHP 的条件判断与各种循环结构,并介绍 PHP 8.0 带来的现代化控制语法。

一、if...elseif...else 条件分支

这是最基础的条件判断结构。当条件表达式的结果为布尔值 true 时,执行对应的代码块。

<?php $score = 85; if ($score >= 90) { echo "优秀"; } elseif ($score >= 80) { echo "良好"; } elseif ($score >= 60) { echo "及格"; } else { echo "不及格"; } // 输出:良好

替代语法 (用于 HTML 模板)

当 PHP 与 HTML 混合编写时,使用大括号 { } 往往会导致代码混乱。PHP 提供了替代语法,使用冒号 : 和关键字 endif

<?php if ($is_login): ?> <span>欢迎回来,<?= $user_name ?></span> <?php else: ?> <a href="/login.php">请登录</a> <?php endif; ?>

二、switch 与 PHP 8 的 match 表达式

1. 传统 switch 语句

当需要对同一个变量进行多次等值比较时,switch 比 if 更清晰。注意 break 必不可少,否则会发生"穿透"。

<?php $day = "Mon"; switch ($day) { case "Mon": case "Tue": case "Wed": echo "工作日"; break; case "Sat": case "Sun": echo "周末"; break; default: echo "未知"; }

2. PHP 8.0+ match 表达式

match 是 PHP 8 引入的 switch 现代替代品。它更安全(严格比较 `===`)、更简洁(直接返回值)、且没有穿透问题。

<?php $status = 404; $message = match($status) { 200, 300 => "成功", 404 => "页面未找到", 500 => "服务器错误", default => "未知状态", }; echo $message; // 输出:页面未找到 // 注意:match 使用严格比较 (===) // match(404) 和 match("404") 结果是不同的。

三、循环结构

循环用于重复执行一段代码,直到满足退出条件。PHP 提供了四种循环结构。

1. while 与 do-while 循环

while 先判断条件再执行;do-while 先执行一次再判断条件(至少会执行一次)。

<?php $i = 1; while ($i <= 3) { echo "第 {$i} 次"; $i++; } $j = 10; do { echo "这里至少执行一次"; } while ($j > 100); // 条件为 false,但上面已执行

2. for 循环

适合已知执行次数的场景。由初始化、条件判断、自增三部分组成。

<?php // 打印 1 到 5 for ($i = 1; $i <= 5; $i++) { echo $i . " "; } // 输出:1 2 3 4 5

3. foreach 循环 (专门用于数组)

遍历数组最常用的方式,下一章会详细讲数组,这里先看基本用法。

<?php $users = ["惜梦", "小明", "小红"]; foreach ($users as $user) { echo $user . " "; } // 输出:惜梦 小明 小红 // 带键值对的遍历 $info = ["name" => "PHP", "ver" => 8.0]; foreach ($info as $key => $val) { echo "{$key}: {$val}; "; } // 输出:name: PHP; ver: 8.0;

四、循环控制:break 与 continue

<?php for ($i = 1; $i <= 10; $i++) { if ($i == 5) { continue; // 跳过数字 5 } if ($i > 8) { break; // 遇到 9 时彻底终止循环 } echo $i . " "; } // 输出:1 2 3 4 6 7 8

在嵌套循环中,如果直接写 break;,它只会跳出最内层的循环。如果需要同时跳出外层循环,需要使用 break 2; 或者通过将内层循环封装成函数配合 return 来实现。