【PHP 流程控制完全指南】
PHP 流程控制完全指南
🧠 一、什么是流程控制?
在编程中,流程控制是指控制程序执行顺序的语句。它决定了代码是“从上往下执行”,还是“根据条件跳转”,或者“循环执行某些代码”。
PHP 中的流程控制语句主要包括:
- 循环结构:
while
、do-while
、for
、foreach
- 条件结构:
if
、else
、elseif
、switch
、match
- 跳转结构:
break
、continue
、goto
🔁 二、循环结构
1. while
循环
最简单的循环结构,只要条件为 true
,就一直执行。
✅ 示例:
$i = 0;
while ($i < 5) {echo $i;$i++;
}
// 输出:01234
📌 特点:
- 先判断条件,再执行代码块。
- 如果条件一开始就是
false
,则代码块不会执行。
2. do-while
循环
先执行一次,再判断是否继续执行。
✅ 示例:
$i = 0;
do {echo $i;$i++;
} while ($i < 5);
// 输出:01234
📌 特点:
- 至少执行一次代码块。
- 适合“至少做一次”的场景,比如用户输入验证。
3. for
循环
适合已知循环次数的场景。
✅ 示例:
for ($i = 0; $i < 5; $i++) {echo $i;
}
// 输出:01234
📌 三部分说明:
- 初始化:
$i = 0
- 条件判断:
$i < 5
- 迭代操作:
$i++
4. foreach
循环(专为数组设计)
用于遍历数组中的每一个元素。
✅ 示例:
$arr = [1, 2, 3, 4];
foreach ($arr as $value) {echo $value;
}
// 输出:1234
🧠 使用引用时注意:
foreach ($arr as &$value) {$value *= 2;
}
unset($value); // ✅ 必须 unset,否则后续循环可能出错
💡 如果不
unset($value)
,$value
会保留对数组最后一个元素的引用,可能导致后续使用中“意外修改数组”。
🧩 三、条件结构
1. if
、else
、elseif
基本的条件判断语句。
✅ 示例:
$score = 85;
if ($score >= 90) {echo "优秀";
} elseif ($score >= 60) {echo "及格";
} else {echo "不及格";
}
2. switch
判断多个值
适合判断一个变量等于多个值的情况。
✅ 示例:
$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
更现代、更安全,返回值形式,像三元表达式一样使用。
✅ 示例:
$i = 1;
$result = match ($i) {0 => "i equals 0",1 => "i equals 1",default => "i 不是 0 或 1",
};
echo $result;
📌 优点:
- 自动严格比较(
===
) - 不允许贯穿(fall-through)
- 可以直接赋值给变量
🧱 四、跳转结构
1. break
结束当前的 for
、foreach
、while
、do-while
、switch
结构。
✅ 示例:
for ($i = 0; $i < 10; $i++) {if ($i == 5) {break;}echo $i;
}
// 输出:01234
📌 可选参数:
break 2; // 跳出两层循环
2. continue
跳过当前循环中剩余的代码,开始下一次循环。
✅ 示例:
for ($i = 0; $i < 5; $i++) {if ($i == 2) {continue;}echo $i;
}
// 输出:0134
3. goto
跳转到程序中的某个标签位置。
✅ 示例:
goto end;
echo "这段不会执行";
end:
echo "跳转成功!";
📌 注意:
- 不能跳进
for
、while
、switch
等结构中。 - 可以跳出多重循环,但不建议滥用,容易造成“面条式代码”。
📁 五、文件包含结构
1. include
包含文件,出错时只产生警告,脚本继续执行。
✅ 示例:
include 'header.php'; // 如果文件不存在,输出警告,继续执行
echo "继续执行";
2. require
包含文件,出错时产生致命错误,脚本停止执行。
✅ 示例:
require 'config.php'; // 如果文件不存在,脚本停止执行
echo "不会执行";
3. include_once
/ require_once
确保文件只被包含一次,避免重复定义。
✅ 示例:
include_once 'functions.php'; // 即使多次调用,也只包含一次
📌 六、总结对比表
结构 | 用途 | 是否返回值 | 是否可跳出 | 是否可跳过当前循环 |
---|---|---|---|---|
while | 条件循环 | ❌ | ✅ (break ) | ✅ (continue ) |
do-while | 先执行后判断 | ❌ | ✅ | ✅ |
for | 已知循环次数 | ❌ | ✅ | ✅ |
foreach | 遍历数组 | ❌ | ✅ | ✅ |
if / else / elseif | 条件判断 | ❌ | ❌ | ❌ |
switch | 多值判断 | ❌ | ✅ | ❌ |
match | 多值匹配(PHP 8+) | ✅ | ❌ | ❌ |
break | 结束循环或 switch | ❌ | ✅ | ❌ |
continue | 跳过当前循环 | ❌ | ❌ | ✅ |
goto | 跳转到标签 | ❌ | ✅ | ❌ |
include | 包含文件 | ❌ | ❌ | ❌ |
require | 必须包含文件 | ❌ | ❌ | ❌ |