条件语句 #

一、if 语句 #

1.1 基本语法 #

php
<?php
$age = 20;

if ($age >= 18) {
    echo "成年人";
}

1.2 单行语句 #

php
<?php
if ($age >= 18)
    echo "成年人";

if ($age >= 18) echo "成年人";

1.3 代码块 #

php
<?php
if ($age >= 18) {
    echo "成年人\n";
    echo "可以投票\n";
}

二、if-else 语句 #

2.1 基本语法 #

php
<?php
$age = 15;

if ($age >= 18) {
    echo "成年人";
} else {
    echo "未成年人";
}

2.2 嵌套使用 #

php
<?php
$age = 25;
$hasLicense = true;

if ($age >= 18) {
    if ($hasLicense) {
        echo "可以驾驶";
    } else {
        echo "需要考取驾照";
    }
} else {
    echo "年龄不足";
}

三、elseif 语句 #

3.1 基本语法 #

php
<?php
$score = 85;

if ($score >= 90) {
    echo "优秀";
} elseif ($score >= 80) {
    echo "良好";
} elseif ($score >= 70) {
    echo "中等";
} elseif ($score >= 60) {
    echo "及格";
} else {
    echo "不及格";
}

3.2 多条件判断 #

php
<?php
$age = 25;
$isStudent = false;

if ($age < 13) {
    echo "儿童";
} elseif ($age >= 13 && $age < 18) {
    echo "青少年";
} elseif ($age >= 18 && $isStudent) {
    echo "成年学生";
} elseif ($age >= 18 && !$isStudent) {
    echo "成年工作者";
} else {
    echo "其他";
}

四、替代语法 #

4.1 冒号语法 #

php
<?php
$age = 20;

if ($age >= 18):
    echo "成年人";
elseif ($age >= 13):
    echo "青少年";
else:
    echo "儿童";
endif;

4.2 在HTML中使用 #

php
<?php $isLoggedIn = true; ?>

<?php if ($isLoggedIn): ?>
    <div class="welcome">
        <p>欢迎回来!</p>
        <a href="/logout">退出</a>
    </div>
<?php else: ?>
    <div class="login">
        <a href="/login">登录</a>
        <a href="/register">注册</a>
    </div>
<?php endif; ?>

五、条件表达式 #

5.1 比较运算 #

php
<?php
$a = 10;
$b = 20;

if ($a == $b) {
    echo "相等";
}

if ($a === $b) {
    echo "全等";
}

if ($a != $b) {
    echo "不等";
}

if ($a < $b) {
    echo "a小于b";
}

if ($a >= 10) {
    echo "a大于等于10";
}

5.2 逻辑运算 #

php
<?php
$age = 25;
$hasLicense = true;
$hasInsurance = true;

if ($age >= 18 && $hasLicense && $hasInsurance) {
    echo "可以驾驶";
}

if ($age < 18 || !$hasLicense) {
    echo "不能驾驶";
}

if (!$hasInsurance) {
    echo "需要购买保险";
}

5.3 类型检查 #

php
<?php
$value = "hello";

if (is_string($value)) {
    echo "是字符串";
}

if (is_int($value)) {
    echo "是整数";
}

if (is_array($value)) {
    echo "是数组";
}

if ($value === null) {
    echo "是null";
}

六、三元运算符 #

6.1 基本语法 #

php
<?php
$age = 20;
$status = $age >= 18 ? "成年" : "未成年";
echo $status;

6.2 嵌套三元 #

php
<?php
$score = 85;
$grade = $score >= 90 ? "A" : 
         ($score >= 80 ? "B" : 
         ($score >= 70 ? "C" : 
         ($score >= 60 ? "D" : "F")));
echo $grade;

6.3 简写形式 #

php
<?php
$name = "";
$displayName = $name ?: "Guest";
echo $displayName;

$name = "John";
$displayName = $name ?: "Guest";
echo $displayName;

6.4 Null合并 #

php
<?php
$name = $_GET['name'] ?? "Guest";
$page = $_GET['page'] ?? 1;

七、match 表达式(PHP 8.0+) #

7.1 基本语法 #

php
<?php
$status = 200;

$message = match($status) {
    200 => "OK",
    400 => "Bad Request",
    404 => "Not Found",
    500 => "Internal Server Error",
    default => "Unknown Status"
};

echo $message;

7.2 多条件匹配 #

php
<?php
$grade = 'B';

$result = match($grade) {
    'A', 'B' => "优秀",
    'C', 'D' => "及格",
    'F' => "不及格",
    default => "无效成绩"
};

echo $result;

7.3 表达式匹配 #

php
<?php
$value = 15;

$result = match(true) {
    $value < 10 => "小于10",
    $value < 20 => "小于20",
    $value < 30 => "小于30",
    default => "大于等于30"
};

echo $result;

7.4 match vs switch #

php
<?php
$value = 1;

$result = match($value) {
    1 => "一",
    2 => "二",
    default => "其他"
};

switch ($value) {
    case 1:
        $result = "一";
        break;
    case 2:
        $result = "二";
        break;
    default:
        $result = "其他";
}

八、实际应用 #

8.1 表单验证 #

php
<?php
function validateUser(array $data): array
{
    $errors = [];
    
    if (empty($data['name'])) {
        $errors[] = "姓名不能为空";
    } elseif (strlen($data['name']) < 2) {
        $errors[] = "姓名至少2个字符";
    }
    
    if (empty($data['email'])) {
        $errors[] = "邮箱不能为空";
    } elseif (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
        $errors[] = "邮箱格式不正确";
    }
    
    if (empty($data['password'])) {
        $errors[] = "密码不能为空";
    } elseif (strlen($data['password']) < 8) {
        $errors[] = "密码至少8位";
    }
    
    return $errors;
}

8.2 权限检查 #

php
<?php
function canAccess(User $user, string $resource): bool
{
    if ($user->isAdmin()) {
        return true;
    }
    
    if ($user->isBanned()) {
        return false;
    }
    
    if ($user->hasPermission($resource)) {
        return true;
    }
    
    return false;
}

8.3 价格计算 #

php
<?php
function calculatePrice(float $basePrice, string $membership): float
{
    $discount = match($membership) {
        'vip' => 0.8,
        'gold' => 0.7,
        'platinum' => 0.6,
        default => 1.0
    };
    
    return $basePrice * $discount;
}

九、最佳实践 #

9.1 使用严格比较 #

php
<?php
if ($value === null) {
    
}

if ($value !== '') {
    
}

9.2 提前返回 #

php
<?php
function process(?User $user): string
{
    if ($user === null) {
        return "用户不存在";
    }
    
    if (!$user->isActive()) {
        return "用户未激活";
    }
    
    return "处理成功";
}

9.3 避免深层嵌套 #

php
<?php
function checkAccess(User $user): bool
{
    if (!$user->isActive()) {
        return false;
    }
    
    if (!$user->hasPermission('read')) {
        return false;
    }
    
    if ($user->isBanned()) {
        return false;
    }
    
    return true;
}

9.4 使用 match 替代复杂 switch #

php
<?php
$status = match($code) {
    200, 201, 204 => 'success',
    400, 401, 403 => 'client_error',
    500, 502, 503 => 'server_error',
    default => 'unknown'
};

十、总结 #

本章学习了:

  • if 语句
  • if-else 语句
  • elseif 语句
  • 替代语法
  • 三元运算符
  • match 表达式(PHP 8.0+)
  • 最佳实践

下一章将学习 switch 语句。

最后更新:2026-03-26