PHP 入门教程
PHP 条件判断
本教程共 65 篇 · 第 11 篇 · 更新于 2026-07-24 · 约 4 分钟阅读
PHPPHP8条件判断ifswitchmatch
11. PHP 条件判断
本节目标:掌握 if、switch 和 match 三种条件结构。学完你能根据不同条件执行不同代码逻辑。
11.1 if 语句
if 在条件成立时执行代码:
<?php
$score = 85;
if ($score >= 60) {
echo "及格了!";
}
?>
条件可以是任何表达式,PHP 会自动转为布尔值判断。
11.2 if…else 语句
条件成立执行一段代码,不成立执行另一段:
<?php
$age = 17;
if ($age >= 18) {
echo "已成年";
} else {
echo "未成年";
}
?>
11.3 if…elseif…else 语句
多个条件依次判断:
<?php
$score = 75;
if ($score >= 90) {
echo "优秀";
} elseif ($score >= 80) {
echo "良好";
} elseif ($score >= 60) {
echo "及格";
} else {
echo "不及格";
}
?>
Tip
elseif和else if效果相同,但elseif是一个单词,更推荐。
11.4 嵌套 if
一个 if 语句内可以再嵌套 if:
<?php
$isLogin = true;
$isAdmin = false;
if ($isLogin) {
echo "欢迎回来";
if ($isAdmin) {
echo ",管理员";
} else {
echo ",普通用户";
}
} else {
echo "请先登录";
}
?>
Note嵌套层次太深会降低可读性。通常超过三层时,应考虑重构或使用其他结构。
11.5 switch 语句
当需要对一个变量进行多个等值判断时,switch 比 if…elseif 更清晰:
<?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;
default:
echo "周末";
break;
}
?>
Warning不要忘记
break!如果没有 break,程序会继续执行下一个 case,这称为”穿透”(fall-through)。有时可以利用这个特性,但大多数情况下是 bug。
<?php
// 故意利用穿透的示例
$grade = "B";
switch ($grade) {
case "A":
case "B":
case "C":
echo "通过";
break;
case "D":
case "F":
echo "未通过";
break;
default:
echo "无效成绩";
}
?>
11.6 match 表达式(PHP 8.0+)
match 是 PHP 8.0 引入的新特性,类似加强版 switch:
<?php
$status = 200;
// match 返回值,可以直接赋值
$message = match ($status) {
200 => "OK",
404 => "Not Found",
500 => "Server Error",
default => "Unknown Status",
};
echo $message; // OK
?>
match 与 switch 的关键区别:
- match 是表达式,可以返回值;switch 是语句
- match 使用严格比较
===;switch 使用松散比较== - match 不需要 break,每个分支只匹配一次,不会穿透
<?php
// 使用 match 简化多条件判断
$score = 85;
$grade = match (true) {
$score >= 90 => "A",
$score >= 80 => "B",
$score >= 70 => "C",
$score >= 60 => "D",
default => "F",
};
echo "等级: $grade"; // B
?>
11.7 条件表达式简写
<?php
$isVip = true;
// 传统写法
if ($isVip) {
$price = 80;
} else {
$price = 100;
}
// 三元运算符简写
$price = $isVip ? 80 : 100;
// 更复杂的简写(PHP 8.0+)
$discount = match ($isVip) {
true => 0.8,
false => 1.0,
};
$price = 100 * $discount;
?>
11.8 常见错误
<?php
// 错误 1:用 = 代替 ==
$x = 5;
if ($x = 10) { // 把 10 赋给 $x,然后判断,永远为 true
echo "这个条件总是成立";
}
// 正确写法
if ($x == 10) {
echo "等于 10";
}
// 错误 2:忘记大括号(单行可以省略,但不推荐)
if ($x > 0)
echo "正数";
echo "这行不在 if 里!"; // 总是执行
// 推荐写法
if ($x > 0) {
echo "正数";
}
?>
Tip即使只有一行代码,也建议写大括号。这样后续添加代码时不容易出错。
来源:参考了 w3cschool「PHP if…else 语句」「PHP switch 语句」、runoob「PHP If…Else」「PHP Switch」以及 php.net 官方文档,综合改写后所得。