PHP If...Else...Elseif
PHP 条件语句:if, else, elseif
Section titled “PHP 条件语句:if, else, elseif”条件语句允许您的程序根据指定的条件是真 (true) 还是假 (false) 来做出决策并执行不同的代码块。
PHP 条件结构
Section titled “PHP 条件结构”编写代码时,您经常需要根据特定标准控制执行流程。PHP 为此提供了几种结构:
ifstatement: 仅当指定的条件评估为true时执行代码块。if...elsestatement: 如果条件为true,则执行一个代码块;如果条件为false,则执行另一个代码块。if...elseif...elsestatement: 允许按顺序检查多个条件。它执行与第一个评估为true的条件关联的代码块。可选的else块在前面所有if或elseif条件都为false时执行。switchstatement: 基于单个表达式的值选择要执行的多个代码块中的一个。(在下一章介绍)。- Ternary Operator (
?:): 简单if...else语句的简写形式。 - Null Coalescing Operator (
??): 检查某个变量是否存在且不为null的简写形式,如果不存在或为null则提供默认值。 matchexpression (PHP 8.0+):switch的现代替代方案,具有更严格的比较和基于表达式的评估。
本章重点介绍 if、else 和 elseif。
if 语句仅在其条件满足(评估为 true)时执行代码块。
if (condition) { // Code to execute if condition is true }
condition 通常是一个评估为布尔值(true 或 false)的表达式。PHP 在条件语境中会自动将值转换为布尔值(例如,0、""、null、[] 评估为 false;非零数字、非空字符串/数组评估为 true)。
示例:根据一天的时间问候
<?php
$currentHour = (int) date('G'); // 获取当前小时(24小时制,整数)
if ($currentHour < 12) { echo "Good morning!";}
if ($currentHour >= 18) { echo "Good evening!";}
?>在此示例中,只有当脚本在中午之前运行时才会显示“Good morning!”。只有当脚本在下午 6 点或之后运行时才会显示“Good evening!”。
if...else 语句
Section titled “if...else 语句”if...else 语句在 if 条件为 false 时提供另一条执行路径。
if (condition) { // Code to execute if condition is true } else { // Code to execute if condition is false }
示例:显示登录/注销状态
<?php
$isLoggedIn = false; // 示例变量
if ($isLoggedIn) { echo "Welcome back, User!";} else { echo "Please log in to continue.";}
?>这里,根据 $isLoggedIn 的值,将显示两条消息中的一条且仅一条。
if...elseif...else 语句
Section titled “if...elseif...else 语句”此语句允许您按顺序检查多个条件。PHP 会检查每个条件(if,然后是 elseif,然后是下一个 elseif,依此类推),直到找到一个为 true 的条件。它执行与该条件关联的代码块,然后跳过其余的 elseif 和 else 代码块。
if (condition1) { // Code for condition1 being true } elseif (condition2) { // Code for condition1 false, condition2 true } elseif (condition3) { // Code for condition1/2 false, condition3 true } else { // Code if none of the above conditions are true (optional) }
示例:更详细的基于时间的问候
<?php
$currentHour = (int) date('G'); // 获取当前小时 (0-23)
if ($currentHour < 12) { echo "Good morning!";} elseif ($currentHour < 18) { // 如果不小于 12,则检查是否小于 18 echo "Good afternoon!";} else { // 如果不小于 12 且不小于 18(即 18 或更大) echo "Good evening!";}
?>这确保只显示一条问候语,对应于第一个匹配的时间范围。
替代语法(较少见)
Section titled “替代语法(较少见)”PHP 也支持控制结构的替代语法,常用于 HTML 模板中,用冒号 : 替换大括号 {},并以 endif;、else:、elseif: 结尾。
示例:
<?php $userRole = 'editor'; ?>
<?php if ($userRole === 'admin'): ?> <p>Welcome, Administrator! You have full access.</p><?php elseif ($userRole === 'editor'): ?> <p>Welcome, Editor! You can manage content.</p><?php else: ?> <p>Welcome, Guest!</p><?php endif; ?>虽然这种语法是有效的,但标准的大括号语法 {...} 在直接的 HTML 模板之外的现代 PHP 代码中更常见。
简写条件语句
Section titled “简写条件语句”三元运算符 (?:)
Section titled “三元运算符 (?:)”提供了一种基于条件简洁地赋值的方式。
Syntax: $variable = (condition) ? value_if_true : value_if_false;
<?php$age = 25;$status = ($age >= 18) ? 'Adult' : 'Minor';echo "Status: " . $status; // 输出:Status: Adult?>空值合并运算符 (??)
Section titled “空值合并运算符 (??)”如果变量为 null 或不存在,则提供一个默认值。
Syntax: $variable = $value_to_check ?? default_value;
<?php// 假设 $_GET['username'] 可能已设置,也可能未设置$username = $_GET['username'] ?? 'Guest';echo "Welcome, " . htmlspecialchars($username) . "!";
$config['setting'] = null;$settingValue = $config['setting'] ?? 'Default Setting';echo "<br>Setting: " . $settingValue; // 输出:Setting: Default Setting?>switch 语句用于基于单个值处理多分支,以及 match 表达式 (PHP 8.0+),一个现代替代方案,将在下一章中讨论。