PHP Switch
PHP switch 语句
Section titled “PHP switch 语句”switch 语句提供了一种根据单个表达式的值执行不同代码块的方式。它通常用作一系列 if...elseif...else 语句的替代方案。
PHP switch 语句
Section titled “PHP switch 语句”使用 switch 语句根据比较结果选择执行多个代码块中的一个。
switch (expression) { case value1: // 如果 expression == value1 执行的代码 break; // 退出 switch 语句
case value2: // 如果 expression == value2 执行的代码 break;
case value3: // 如果 expression == value3 执行的代码 break;
// ... 更多 case
default: // 如果 expression 不匹配以上任何 case 执行的代码}expression(通常是一个变量)会被评估一次。expression的值会与每个case语句中指定的值进行比较。- 重要: 比较是宽松的 (
==),这意味着可能会发生类型转换(例如,0 == 'a'为 true)。 - 如果找到匹配项,则执行与该
case相关联的代码块。 break语句至关重要。它会停止switch块内部的执行。如果没有break,即使值不匹配,执行也会“穿透”到下一个case块。- 可选的
defaultcase 在没有任何case值匹配expression时执行。
<?php$favcolor = "red";
switch ($favcolor) { case "red": echo "你最喜欢的颜色是红色!"; break; // 在此停止执行 case "blue": echo "你最喜欢的颜色是蓝色!"; break; case "green": echo "你最喜欢的颜色是绿色!"; break; default: echo "你最喜欢的颜色既不是红色、蓝色,也不是绿色!";}// 输出: 你最喜欢的颜色是红色!
echo "<br>";
$day = "Monday";switch ($day) { case "Saturday": case "Sunday": echo "是周末啦!"; break; // 检查周末后退出 case "Monday": echo "工作周开始."; // 这里没有 break - 演示穿透 case "Tuesday": case "Wednesday": case "Thursday": echo " 还在工作中..."; // 如果今天是 Monday,这也会执行 break; case "Friday": echo "快周末啦!"; break; default: echo "无效日期.";}// 输出: 工作周开始. 还在工作中...
?>PHP 8 match 表达式(现代替代方案)
Section titled “PHP 8 match 表达式(现代替代方案)”PHP 8.0 引入了 match 表达式,它通常是 switch 更简洁、更安全的替代方案:
- 严格比较: 使用严格比较 (
===),避免意外的类型转换问题。 - 基于表达式:
match是一个表达式,这意味着它可以返回一个值,可以赋给变量或直接使用。 - 无穿透: 不需要
break语句;只执行第一个匹配分支对应的代码。 - 需要穷尽所有 case(或
default): 如果表达式不匹配任何分支且没有default,则会抛出UnhandledMatchError。 - 允许多个条件: 条件可以用逗号分隔。
match 示例(与颜色示例等效):
Section titled “match 示例(与颜色示例等效):”<?php$favcolor = "red";
$message = match ($favcolor) { "red" => "你最喜欢的颜色是红色!", "blue" => "你最喜欢的颜色是蓝色!", "green" => "你最喜欢的颜色是绿色!", default => "你最喜欢的颜色既不是红色、蓝色,也不是绿色!",};
echo $message;// 输出: 你最喜欢的颜色是红色!?>switch 语句仍然有用,但在 PHP 8+ 中,当您需要严格比较和返回值时,考虑使用 match 来获得更清晰、更安全的条件逻辑。