PHP If...Else

条件语句在编程中用于根据不同的条件执行不同的代码块。PHP提供了多种条件语句,包括if语句、if...else语句、if...elseif...else语句以及嵌套条件。本教程将详细介绍这些条件语句的使用方法。

PHP if 语句

if语句是最基本的条件语句,用于在条件为真时执行一段代码:

<?php
$age = 18;

if ($age >= 18) {
    echo "您已成年,可以访问本网站。";
}
?>

在上面的例子中,我们检查变量$age是否大于或等于18。如果条件为真,就输出一条消息。

PHP if...else 语句

if...else语句允许您在条件为真时执行一段代码,在条件为假时执行另一段代码:

<?php
$age = 16;

if ($age >= 18) {
    echo "您已成年,可以访问本网站。";
} else {
    echo "您未成年,无法访问本网站。";
}
?>

在这个例子中,如果$age大于或等于18,我们输出一条消息表示用户已成年;否则,我们输出一条消息表示用户未成年。

PHP if...elseif...else 语句

if...elseif...else语句允许您检查多个条件,并在第一个为真的条件下执行相应的代码块:

<?php
$score = 85;

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

在这个例子中,我们根据$score的值输出不同的评价。PHP会按顺序检查每个条件,直到找到一个为真的条件,然后执行相应的代码块。

PHP 嵌套 if 语句

您可以在一个if语句内部嵌套另一个if语句,以检查多个条件:

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

if ($age >= 18) {
    if ($is_member) {
        echo "欢迎回来,会员!";
    } else {
        echo "欢迎访问,请考虑注册会员以获取更多特权。";
    }
} else {
    echo "您未成年,无法访问本网站。";
}
?>

在这个例子中,我们首先检查用户是否已成年,然后如果已成年,再检查用户是否为会员,并根据结果输出不同的消息。

PHP 三元运算符

三元运算符是if...else语句的简写形式,用于根据条件返回两个值中的一个:

<?php
$age = 18;
$message = ($age >= 18) ? "您已成年" : "您未成年";
echo $message;
?>

在这个例子中,如果$age大于或等于18,变量$message将被赋值为"您已成年";否则,它将被赋值为"您未成年"。

PHP NULL 合并运算符

PHP 7引入了NULL合并运算符??,用于检查变量是否存在且不为NULL。如果变量存在且不为NULL,则返回该变量的值;否则,返回指定的默认值:

<?php
// 假设$_GET['name']不存在或为NULL
$name = $_GET['name'] ?? "访客";
echo "欢迎,$name!";

// 等价于
$name = isset($_GET['name']) ? $_GET['name'] : "访客";
echo "欢迎,$name!";
?>

在这个例子中,如果$_GET['name']不存在或为NULL,变量$name将被赋值为"访客";否则,它将被赋值为$_GET['name']的值。

PHP 逻辑运算符在条件语句中的应用

您可以使用逻辑运算符来组合多个条件:

<?php
$username = "admin";
$password = "admin123";

// 使用AND运算符
if ($username == "admin" && $password == "admin123") {
    echo "登录成功!";
} else {
    echo "用户名或密码错误!";
}

// 使用OR运算符
$user_type = "guest";
if ($user_type == "admin" || $user_type == "moderator") {
    echo "您拥有管理权限。";
} else {
    echo "您没有管理权限。";
}

// 使用NOT运算符
$is_blocked = false;
if (!is_blocked) {
    echo "您可以访问本网站。";
} else {
    echo "您的账户已被封禁。";
}
?>

在这些例子中,我们使用了逻辑运算符&&(AND)、||(OR)和!(NOT)来组合多个条件。

PHP 条件语句中的比较运算符

在条件语句中,您经常需要使用比较运算符来比较值:

<?php
$x = 10;
$y = 5;

// 等于(==)
if ($x == 10) {
    echo "x等于10\n";
}

// 全等(===)
if ($x === "10") {
    echo "这不会被输出,因为x是整数,而"10"是字符串\n";
}

// 不等于(!=或<>)
if ($x != $y) {
    echo "x不等于y\n";
}

// 大于(>)
if ($x > $y) {
    echo "x大于y\n";
}

// 小于(<)
if ($y < $x) {
    echo "y小于x\n";
}

// 大于等于(>=)
if ($x >= 10) {
    echo "x大于等于10\n";
}

// 小于等于(<=)
if ($y <= 5) {
    echo "y小于等于5\n";
}
?>

在这些例子中,我们使用了各种比较运算符来比较值。

PHP 条件语句的最佳实践

  1. 保持条件简单明了:避免在条件中使用过于复杂的表达式,这会使代码难以阅读和维护。如果条件很复杂,可以将其分解为多个小的、可管理的条件,或者使用中间变量来存储中间结果。
  2. 使用正确的比较运算符:在比较值时,确保使用正确的比较运算符。特别是,在需要同时比较值和类型时,使用全等运算符===而不是等于运算符==
  3. 避免重复代码:如果在不同的条件分支中有重复的代码,考虑将这些代码移到条件语句之外,或者重构代码以消除重复。
  4. 使用括号提高可读性:在复杂的条件表达式中,使用括号来明确运算符的优先级,这会使代码更容易阅读和理解。
  5. 考虑使用switch语句替代多个if...elseif语句:如果您有多个基于同一个变量值的条件,可以考虑使用switch语句,这通常会使代码更清晰。
  6. 避免深度嵌套:尽量避免过多的嵌套条件语句,这会使代码难以阅读和维护。如果您发现自己有多个嵌套的if语句,考虑重构代码,例如使用早期返回或者将复杂的逻辑提取到单独的函数中。

PHP If...Else 综合示例

<?php
// 1. 基本的if语句示例

echo "<h4>1. 基本的if语句示例</h4>";

$temperature = 25;

if ($temperature > 30) {
    echo "今天天气很热!";
}

if ($temperature < 10) {
    echo "今天天气很冷!";
}

if ($temperature >= 10 && $temperature <= 30) {
    echo "今天天气很舒适!";
}

echo "<br><br>";

// 2. if...else语句示例

echo "<h4>2. if...else语句示例</h4>";

$age = 16;

if ($age >= 18) {
    echo "您已成年,可以观看这部电影。";
} else {
    echo "您未成年,不适合观看这部电影。";
}

echo "<br><br>";

// 3. if...elseif...else语句示例

echo "<h4>3. if...elseif...else语句示例</h4>";

$score = 75;

if ($score >= 90) {
    echo "您的成绩是:优秀!";
} elseif ($score >= 80) {
    echo "您的成绩是:良好!";
} elseif ($score >= 70) {
    echo "您的成绩是:中等!";
} elseif ($score >= 60) {
    echo "您的成绩是:及格!";
} else {
    echo "您的成绩是:不及格!";
}

echo "<br><br>";

// 4. 嵌套if语句示例

echo "<h4>4. 嵌套if语句示例</h4>";

$username = "john";
$password = "password123";
$is_admin = false;

if ($username == "john") {
    if ($password == "password123") {
        if ($is_admin) {
            echo "欢迎回来,管理员John!";
        } else {
            echo "欢迎回来,John!";
        }
    } else {
        echo "密码错误!";
    }
} else {
    echo "用户名不存在!";
}

echo "<br><br>";

// 5. 三元运算符示例

echo "<h4>5. 三元运算符示例</h4>";

$is_logged_in = true;
$greeting = $is_logged_in ? "欢迎回来!" : "请登录以继续。";
echo $greeting;

echo "<br><br>";

// 6. NULL合并运算符示例

echo "<h4>6. NULL合并运算符示例</h4>";

// 假设$_GET['user']不存在
$user = $_GET['user'] ?? "访客";
echo "欢迎,$user!";

echo "<br><br>";

// 7. 逻辑运算符在条件语句中的应用

echo "<h4>7. 逻辑运算符在条件语句中的应用</h4>";

$day = "Monday";
$is_holiday = false;

// 使用AND运算符
if ($day == "Saturday" && $is_holiday) {
    echo "今天是周六,并且是节假日,不用上班!";
} else {
    echo "今天可能需要上班。";
}

echo "<br>";

// 使用OR运算符
if ($day == "Saturday" || $day == "Sunday") {
    echo "今天是周末,好好休息!";
} else {
    echo "今天是工作日,努力工作!";
}

echo "<br>";

// 使用NOT运算符
if (!is_holiday) {
    echo "今天不是节假日。";
} else {
    echo "今天是节假日!";
}

echo "<br><br>";

// 8. 比较运算符在条件语句中的应用

echo "<h4>8. 比较运算符在条件语句中的应用</h4>";

$x = 10;
$y = "10";
$z = 5;

// 等于(==)
if ($x == $y) {
    echo "x == y: 值相等\n";
}

// 全等(===)
if ($x === $y) {
    echo "x === y: 类型和值都相等\n";
} else {
    echo "x === y: 类型不同(x是整数,y是字符串)\n";
}

// 不等于(!=)
if ($x != $z) {
    echo "x != z: x不等于z\n";
}

// 大于(>)
if ($x > $z) {
    echo "x > z: x大于z\n";
}

// 小于等于(<=)
if ($z <= $x) {
    echo "z <= x: z小于等于x\n";
}

echo "<br><br>";

// 9. 实际应用示例

echo "<h4>9. 实际应用示例</h4>";

// 示例1: 检查用户输入的登录凭据
function validate_login($username, $password) {
    // 这里应该从数据库中获取用户信息并进行验证
    // 为了简化示例,我们使用硬编码的用户名和密码
    $valid_username = "admin";
    $valid_password = "secure123";
    
    if ($username === $valid_username && $password === $valid_password) {
        return "登录成功!";
    } else {
        return "用户名或密码错误!";
    }
}

// 测试登录验证
$login_result = validate_login("admin", "secure123");
echo $login_result . "<br>";

$login_result = validate_login("guest", "123456");
echo $login_result . "<br><br>";

// 示例2: 计算运费
function calculate_shipping($weight, $destination) {
    $shipping_fee = 0;
    
    if ($destination === "local") {
        if ($weight <= 1) {
            $shipping_fee = 5.00;
        } elseif ($weight <= 5) {
            $shipping_fee = 10.00;
        } else {
            $shipping_fee = 15.00;
        }
    } elseif ($destination === "national") {
        if ($weight <= 1) {
            $shipping_fee = 10.00;
        } elseif ($weight <= 5) {
            $shipping_fee = 20.00;
        } else {
            $shipping_fee = 30.00;
        }
    } else {
        // 国际运输
        if ($weight <= 1) {
            $shipping_fee = 20.00;
        } elseif ($weight <= 5) {
            $shipping_fee = 40.00;
        } else {
            $shipping_fee = 60.00;
        }
    }
    
    return $shipping_fee;
}

// 计算运费示例
$weight = 3;
$destination = "national";
$shipping_cost = calculate_shipping($weight, $destination);
echo "重量为 $weight 公斤,运往 $destination 的运费是 $shipping_cost 元。<br><br>";

// 示例3: 根据温度提供穿衣建议
function clothing_suggestion($temperature) {
    if ($temperature >= 30) {
        return "天气很热,建议穿短袖和短裤。";
    } elseif ($temperature >= 20) {
        return "天气温暖,建议穿长袖衬衫和长裤。";
    } elseif ($temperature >= 10) {
        return "天气凉爽,建议穿薄外套和长裤。";
    } else {
        return "天气寒冷,建议穿厚外套、毛衣和保暖裤。";
    }
}

// 获取穿衣建议
$current_temp = 15;
suggestion = clothing_suggestion($current_temp);
echo "当前温度是 $current_temp 度," . $suggestion . "<br><br>";

// 示例4: 检查表单输入
function validate_form($name, $email, $age) {
    $errors = array();
    
    // 验证姓名
    if (empty($name)) {
        $errors[] = "姓名不能为空";
    } else if (strlen($name) < 2) {
        $errors[] = "姓名至少需要2个字符";
    }
    
    // 验证邮箱
    if (empty($email)) {
        $errors[] = "邮箱不能为空";
    } else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = "请输入有效的邮箱地址";
    }
    
    // 验证年龄
    if (empty($age)) {
        $errors[] = "年龄不能为空";
    } else if (!is_numeric($age)) {
        $errors[] = "年龄必须是数字";
    } else if ($age < 18) {
        $errors[] = "您必须年满18岁";
    }
    
    return $errors;
}

// 测试表单验证
$form_errors = validate_form("John", "invalid-email", 16);

if (empty($form_errors)) {
    echo "表单验证通过!";
} else {
    echo "表单验证失败,错误信息:<br>";
    foreach ($form_errors as $error) {
        echo "- $error<br>";
    }
}

echo "<br><br>";

// 示例5: 检查用户权限
function check_permission($user_role, $required_permission) {
    // 定义不同角色的权限
    $permissions = array(
        "guest" => array("view"),
        "user" => array("view", "edit", "comment"),
        "moderator" => array("view", "edit", "comment", "delete", "moderate"),
        "admin" => array("view", "edit", "comment", "delete", "moderate", "administer")
    );
    
    // 检查用户角色是否存在
    if (!isset($permissions[$user_role])) {
        return false;
    }
    
    // 检查用户是否有指定权限
    if (in_array($required_permission, $permissions[$user_role])) {
        return true;
    } else {
        return false;
    }
}

// 测试权限检查
$user_role = "moderator";
$required_permission = "delete";

if (check_permission($user_role, $required_permission)) {
    echo "用户角色 '$user_role' 拥有 '$required_permission' 权限。";
} else {
    echo "用户角色 '$user_role' 没有 '$required_permission' 权限。";
}

echo "<br><br>";

// 示例6: 计算折扣价格
function calculate_discount($original_price, $customer_type, $is_member) {
    $discount = 0;
    
    // 基础折扣
    if ($customer_type === "vip") {
        $discount += 0.2; // 20% 折扣
    } elseif ($customer_type === "regular") {
        $discount += 0.1; // 10% 折扣
    }
    
    // 会员额外折扣
    if ($is_member) {
        $discount += 0.05; // 额外5% 折扣
    }
    
    // 应用折扣
    $discount_price = $original_price * (1 - $discount);
    
    return $discount_price;
}

// 计算折扣价格示例
$original_price = 100;
$customer_type = "vip";
$is_member = true;
$final_price = calculate_discount($original_price, $customer_type, $is_member);
echo "原价: $original_price 元,折后价: $final_price 元(折扣率: " . (($original_price - $final_price) / $original_price * 100) . "%)";
?>