PHP控制结构概述
控制结构是编程语言中用于控制程序执行流程的语句。PHP提供了丰富的控制结构,包括条件语句、循环语句和跳转语句,使程序能够根据不同的条件执行不同的代码块。
- 条件语句: if, else, elseif, switch
- 循环语句: while, do-while, for, foreach
- 跳转语句: break, continue, goto
控制结构的重要性
控制结构是编程的基本构建块,它们允许程序根据不同的输入和条件做出决策,实现复杂的逻辑。没有控制结构,程序将只能按顺序执行,无法处理复杂的业务逻辑。
条件语句 - if
if 语句用于在条件为 true 时执行代码。它是PHP中最基本的控制结构之一。
<?php
$age = 20;
// 基本的if语句
if ($age >= 18) {
echo "您是成年人<br>";
}
// 单行if语句(不推荐)
if ($age >= 18) echo "单行if语句<br>";
// 替代语法(常用于模板中)
if ($age >= 18):
echo "使用替代语法<br>";
endif;
?>
if语句的工作原理
if语句首先评估括号内的条件表达式。如果结果为true,则执行大括号内的代码块;如果为false,则跳过该代码块。
- 始终使用大括号,即使只有一行代码
- 保持条件表达式简洁明了
- 在模板中使用替代语法提高可读性
条件语句 - if...else
if...else 语句在条件为 true 时执行一块代码,条件为 false 时执行另一块代码。
<?php
$age = 16;
// 基本的if...else语句
if ($age >= 18) {
echo "您是成年人<br>";
} else {
echo "您是未成年人<br>";
}
// 替代语法
if ($age >= 18):
echo "成年人<br>";
else:
echo "未成年人<br>";
endif;
?>
if...else的应用场景
if...else语句常用于需要两种可能结果的情况,例如:
- 用户登录验证
- 权限检查
- 表单验证
- 状态判断
条件语句 - if...elseif...else
if...elseif...else 语句用于执行多个条件判断。
<?php
$score = 85;
// 基本的if...elseif...else语句
if ($score >= 90) {
echo "成绩优秀<br>";
} elseif ($score >= 80) {
echo "成绩良好<br>";
} elseif ($score >= 60) {
echo "成绩及格<br>";
} else {
echo "成绩不及格<br>";
}
// 替代语法
if ($score >= 90):
echo "优秀<br>";
elseif ($score >= 80):
echo "良好<br>";
elseif ($score >= 60):
echo "及格<br>";
else:
echo "不及格<br>";
endif;
?>
elseif的使用技巧
使用elseif时,条件应按从最严格到最宽松的顺序排列,这样可以提高代码效率。
条件语句 - switch
switch 语句用于基于不同条件执行不同动作。它比多个if...elseif语句更简洁,适用于多个固定值的比较。
<?php
$day = "Monday";
switch ($day) {
case "Monday":
echo "今天是星期一<br>";
break;
case "Tuesday":
echo "今天是星期二<br>";
break;
case "Wednesday":
echo "今天是星期三<br>";
break;
case "Thursday":
echo "今天是星期四<br>";
break;
case "Friday":
echo "今天是星期五<br>";
break;
default:
echo "今天是周末<br>";
}
// 多个case共享代码
$number = 3;
switch ($number) {
case 1:
case 2:
case 3:
echo "数字是1、2或3<br>";
break;
case 4:
case 5:
echo "数字是4或5<br>";
break;
default:
echo "数字不在1-5范围内<br>";
}
?>
switch vs if...elseif
switch语句适用于比较固定值的情况,而if...elseif更适合比较范围或复杂条件。
| 场景 | 推荐使用 | 原因 |
|---|---|---|
| 固定值比较 | switch | 代码更简洁,执行效率更高 |
| 范围比较 | if...elseif | switch不支持范围比较 |
| 复杂条件 | if...elseif | 可以组合多个条件 |
循环语句 - while
while 循环在指定条件为 true 时执行代码块。
<?php
// 基本的while循环
$i = 1;
while ($i <= 5) {
echo "数字: $i<br>";
$i++;
}
// 替代语法
$j = 1;
while ($j <= 3):
echo "替代语法: $j<br>";
$j++;
endwhile;
// 无限循环(谨慎使用)
/*
$k = 1;
while (true) {
echo "无限循环: $k<br>";
$k++;
if ($k > 10) break; // 使用break退出循环
}
*/
?>
while循环的应用场景
while循环适用于不确定循环次数的情况,例如:
- 读取文件直到文件结束
- 处理数据库结果集
- 等待用户输入
- 处理队列任务
循环语句 - do...while
do...while 循环首先执行一次代码块,然后检查条件,如果条件为 true,重复循环。
<?php
// 基本的do...while循环
$i = 1;
do {
echo "数字: $i<br>";
$i++;
} while ($i <= 5);
// do...while至少执行一次
$j = 10;
do {
echo "这个会执行一次: $j<br>";
$j++;
} while ($j < 5); // 条件为false,但循环体已执行一次
?>
do...while的特点
do...while循环保证循环体至少执行一次,这是它与while循环的主要区别。
循环语句 - for
for 循环用于已知循环次数的情况。
<?php
// 基本的for循环
for ($i = 1; $i <= 5; $i++) {
echo "数字: $i<br>";
}
// 替代语法
for ($j = 1; $j <= 3; $j++):
echo "替代语法: $j<br>";
endfor;
// 复杂的for循环
echo "<br>乘法表:<br>";
for ($i = 1; $i <= 9; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "$j×$i=" . ($j * $i) . " ";
}
echo "<br>";
}
?>
for循环的结构
for循环由三个表达式组成:
- 初始化表达式: 在循环开始前执行一次
- 条件表达式: 在每次循环开始前检查
- 递增表达式: 在每次循环结束后执行
循环语句 - foreach
foreach 循环用于遍历数组。
<?php
// 遍历索引数组
$colors = ["红色", "绿色", "蓝色"];
echo "遍历索引数组:<br>";
foreach ($colors as $color) {
echo "颜色: $color<br>";
}
// 遍历关联数组
$person = [
"name" => "张三",
"age" => 25,
"city" => "北京"
];
echo "<br>遍历关联数组:<br>";
foreach ($person as $key => $value) {
echo "$key: $value<br>";
}
// 替代语法
echo "<br>使用替代语法:<br>";
foreach ($colors as $color):
echo "颜色: $color<br>";
endforeach;
?>
foreach循环的优势
foreach循环是遍历数组最简单、最安全的方式,因为它:
- 自动处理数组索引
- 不会出现越界错误
- 代码简洁易读
- 适用于所有类型的数组
跳转语句 - break 和 continue
break 和 continue 语句用于控制循环的执行。
<?php
// break示例 - 提前退出循环
echo "break示例:<br>";
for ($i = 1; $i <= 10; $i++) {
if ($i == 6) {
break; // 当$i等于6时退出循环
}
echo "$i ";
}
echo "<br>循环结束<br><br>";
// continue示例 - 跳过当前迭代
echo "continue示例:<br>";
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) {
continue; // 跳过偶数
}
echo "$i "; // 只输出奇数
}
echo "<br>循环结束<br><br>";
// 指定跳出层数
echo "多层循环break:<br>";
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($i == 2 && $j == 2) {
break 2; // 跳出两层循环
}
echo "i=$i, j=$j<br>";
}
}
?>
break和continue的区别
| 语句 | 作用 | 应用场景 |
|---|---|---|
| break | 完全退出循环 | 找到目标后提前结束循环 |
| continue | 跳过当前迭代,继续下一次循环 | 跳过不符合条件的元素 |
goto 语句
goto 语句用于跳转到程序中指定的位置。
<?php
$i = 0;
start:
echo "i = $i<br>";
$i++;
if ($i < 5) {
goto start; // 跳转到start标签
}
echo "循环结束<br>";
// 使用goto跳出多层循环
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($i == 2 && $j == 2) {
goto end;
}
echo "i=$i, j=$j<br>";
}
}
end:
echo "使用goto跳出循环<br>";
?>
控制结构最佳实践
代码可读性
- 使用有意义的变量名和函数名
- 保持条件表达式简洁
- 适当使用空格和缩进
- 添加必要的注释
性能优化
- 在循环外计算不变的表达式
- 使用最适合的循环类型
- 避免在循环内执行数据库查询
- 使用break提前退出循环
错误处理
- 检查循环条件避免无限循环
- 处理可能的边界情况
- 使用try-catch处理异常
实践练习
创建一个PHP程序,实现以下功能:
- 使用if...elseif...else实现成绩评级系统
- 使用switch语句实现星期几的判断
- 使用for循环输出乘法表
- 使用while循环计算1到100的和
- 使用foreach循环遍历数组
- 使用break和continue控制循环流程
扩展练习
尝试实现以下更复杂的程序:
- 用户登录系统,根据用户角色显示不同内容
- 商品筛选系统,根据多个条件筛选商品
- 分页显示系统,使用循环生成分页链接