首页 / PHP 入门教程 / PHP 条件判断

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

elseifelse 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 的关键区别:

  1. match 是表达式,可以返回值;switch 是语句
  2. match 使用严格比较 ===;switch 使用松散比较 ==
  3. 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 官方文档,综合改写后所得。