【PHP 流程控制完全指南】

PHP 流程控制完全指南


🧠 一、什么是流程控制?

在编程中,流程控制是指控制程序执行顺序的语句。它决定了代码是"从上往下执行",还是"根据条件跳转",或者"循环执行某些代码"。

PHP 中的流程控制语句主要包括:

  • 循环结构whiledo-whileforforeach
  • 条件结构ifelseelseifswitchmatch
  • 跳转结构breakcontinuegoto

🔁 二、循环结构

1. while 循环

最简单的循环结构 ,只要条件为 true,就一直执行。

✅ 示例:
php 复制代码
$i = 0;
while ($i < 5) {
    echo $i;
    $i++;
}
// 输出:01234
📌 特点:
  • 先判断条件,再执行代码块。
  • 如果条件一开始就是 false,则代码块不会执行。

2. do-while 循环

先执行一次,再判断是否继续执行

✅ 示例:
php 复制代码
$i = 0;
do {
    echo $i;
    $i++;
} while ($i < 5);
// 输出:01234
📌 特点:
  • 至少执行一次代码块。
  • 适合"至少做一次"的场景,比如用户输入验证。

3. for 循环

适合已知循环次数的场景

✅ 示例:
php 复制代码
for ($i = 0; $i < 5; $i++) {
    echo $i;
}
// 输出:01234
📌 三部分说明:
  1. 初始化:$i = 0
  2. 条件判断:$i < 5
  3. 迭代操作:$i++

4. foreach 循环(专为数组设计)

用于遍历数组中的每一个元素

✅ 示例:
php 复制代码
$arr = [1, 2, 3, 4];
foreach ($arr as $value) {
    echo $value;
}
// 输出:1234
🧠 使用引用时注意:
php 复制代码
foreach ($arr as &$value) {
    $value *= 2;
}
unset($value); // ✅ 必须 unset,否则后续循环可能出错

💡 如果不 unset($value)$value 会保留对数组最后一个元素的引用,可能导致后续使用中"意外修改数组"。


🧩 三、条件结构

1. ifelseelseif

基本的条件判断语句

✅ 示例:
php 复制代码
$score = 85;
if ($score >= 90) {
    echo "优秀";
} elseif ($score >= 60) {
    echo "及格";
} else {
    echo "不及格";
}

2. switch 判断多个值

适合判断一个变量等于多个值的情况

✅ 示例:
php 复制代码
$i = 1;
switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    default:
        echo "i 不是 0 或 1";
}
📌 注意:
  • 每个 case 后面要加 break,否则会"贯穿"执行下一个 case
  • default 是可选的,用于处理"都不匹配"的情况。

3. match(PHP 8.0+)

switch 更现代、更安全,返回值形式,像三元表达式一样使用。

✅ 示例:
php 复制代码
$i = 1;
$result = match ($i) {
    0 => "i equals 0",
    1 => "i equals 1",
    default => "i 不是 0 或 1",
};
echo $result;
📌 优点:
  • 自动严格比较(===
  • 不允许贯穿(fall-through)
  • 可以直接赋值给变量

🧱 四、跳转结构

1. break

结束当前的 forforeachwhiledo-whileswitch 结构

✅ 示例:
php 复制代码
for ($i = 0; $i < 10; $i++) {
    if ($i == 5) {
        break;
    }
    echo $i;
}
// 输出:01234
📌 可选参数:
php 复制代码
break 2; // 跳出两层循环

2. continue

跳过当前循环中剩余的代码,开始下一次循环

✅ 示例:
php 复制代码
for ($i = 0; $i < 5; $i++) {
    if ($i == 2) {
        continue;
    }
    echo $i;
}
// 输出:0134

3. goto

跳转到程序中的某个标签位置

✅ 示例:
php 复制代码
goto end;
echo "这段不会执行";
end:
echo "跳转成功!";
📌 注意:
  • 不能跳进 forwhileswitch 等结构中。
  • 可以跳出多重循环,但不建议滥用,容易造成"面条式代码"。

📁 五、文件包含结构

1. include

包含文件,出错时只产生警告,脚本继续执行

✅ 示例:
php 复制代码
include 'header.php'; // 如果文件不存在,输出警告,继续执行
echo "继续执行";

2. require

包含文件,出错时产生致命错误,脚本停止执行

✅ 示例:
php 复制代码
require 'config.php'; // 如果文件不存在,脚本停止执行
echo "不会执行";

3. include_once / require_once

确保文件只被包含一次,避免重复定义

✅ 示例:
php 复制代码
include_once 'functions.php'; // 即使多次调用,也只包含一次

📌 六、总结对比表

结构 用途 是否返回值 是否可跳出 是否可跳过当前循环
while 条件循环 ✅ (break) ✅ (continue)
do-while 先执行后判断
for 已知循环次数
foreach 遍历数组
if / else / elseif 条件判断
switch 多值判断
match 多值匹配(PHP 8+)
break 结束循环或 switch
continue 跳过当前循环
goto 跳转到标签
include 包含文件
require 必须包含文件
相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5