Skip to content

PHP If...Else...Elseif

条件语句允许您的程序根据指定的条件是真 (true) 还是假 (false) 来做出决策并执行不同的代码块。

编写代码时,您经常需要根据特定标准控制执行流程。PHP 为此提供了几种结构:

  • if statement: 仅当指定的条件评估为 true 时执行代码块。
  • if...else statement: 如果条件为 true,则执行一个代码块;如果条件为 false,则执行另一个代码块。
  • if...elseif...else statement: 允许按顺序检查多个条件。它执行与第一个评估为 true 的条件关联的代码块。可选的 else 块在前面所有 if 或 elseif 条件都为 false 时执行。
  • switch statement: 基于单个表达式的值选择要执行的多个代码块中的一个。(在下一章介绍)。
  • Ternary Operator (?:): 简单 if...else 语句的简写形式。
  • Null Coalescing Operator (??): 检查某个变量是否存在且不为 null 的简写形式,如果不存在或为 null 则提供默认值。
  • match expression (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 语句在 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 的值,将显示两条消息中的一条且仅一条。

此语句允许您按顺序检查多个条件。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!";
}
?>

这确保只显示一条问候语,对应于第一个匹配的时间范围。

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 代码中更常见。

提供了一种基于条件简洁地赋值的方式。

Syntax: $variable = (condition) ? value_if_true : value_if_false;

<?php
$age = 25;
$status = ($age >= 18) ? 'Adult' : 'Minor';
echo "Status: " . $status; // 输出:Status: Adult
?>

如果变量为 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+),一个现代替代方案,将在下一章中讨论。