PHP - Switch 语句



PHP 中的 switch 语句可以被视为一系列 if...else 语句。假设您需要比较具有许多不同值的表达式或变量,并根据它等于的值执行不同的代码。在这种情况下,您将使用多重含义 if...elseif...else 构造。

但是,这样的结构会使代码非常混乱且难以遵循。为了简化此类代码,您可以在 PHP 中使用 switch case 结构,它提供了一种更紧凑的替代方案来避免 if..elseif..else 代码。

以下 PHP 脚本使用 if elseif 语句 -


if ($x == 0) {
   echo "x 等于 0";
} elseif ($x == 1) {
   echo "x 等于 1";
} elseif ($x == 2) {
   echo "x 等于 2";
}

您可以使用 switch case 语句获得相同的结果,如下所示 -


switch ($x) {
   case 0:
      echo "x 等于 0";
   break;
   case 1:
      echo "x 等于 1";
   break;
   case 2:
      echo "x 等于 2";
   break;
}

switch 语句后跟一个表达式,该表达式将依次与每个 case 子句的值进行比较。如果发现表达式与任何 case 匹配,则执行相应的语句块。

  • switch 语句逐行执行大括号内的语句。
  • 如果找到一个 case 语句,其表达式的计算结果与 switch 表达式的值匹配,PHP 就会开始执行这些语句,直到 switch 块结束,或者第一次遇到 break 语句。
  • 如果你没有在 case 的语句列表的末尾写 break 语句,PHP 将继续执行以下 case 的语句。

例子

尝试通过删除 breaks 来运行上述代码。如果 x 的值为 0,您将发现输出包括 “x equals 1” 和 “x equals 2” 行。


<?php
   $x=0;
   switch ($x) {
      case 0:
         echo "x 等于 0 \n";
      case 1:
         echo "x 等于 1 \n";
      case 2:
         echo "x 等于 2";
   }
?>

它将产生以下输出 -

x 等于 0
x 等于 1
x 等于 2

因此,确保以 break 语句结束每个 case 块非常重要。

Switch 默认情况

一种特殊情况是默认情况。此大小写匹配其他大小写不匹配的任何内容。使用 default 是可选的,但如果使用,则必须是大括号内的最后一个大小写。

您可以合并多个 case 来模拟多个与 or 运算符组合的逻辑表达式。


<?php
   $x=10;
   switch ($x) {
      case 0:
      case 1:
      case 2:
         echo "x介于0和2之间 \n";
      break;
      default:
         echo "x小于0或大于2";
   }
?>

要比较的值在 case 子句中给出。该值可以是数字、字符串,甚至是函数。但是,不能将比较运算符(<、> == 或 !=)用作 case 子句的值。

您可以选择在 case 子句使用分号而不是冒号。如果未找到匹配的 case,并且也没有 default 分支,则不会执行任何代码,就像没有 if 语句为 true 一样。

switch-endswitch 语句

PHP 允许通过使用 switch-endswitch 语句分隔 switch 结构来使用替代语法。以下版本的 switch case 是可接受的。


<?php
   $x=0;
   switch ($x) :
      case 0:
         echo "x等于0";
      break;
      case 1:
         echo "x等于1 \n";
      break;
      case 2:
         echo "x等于2 \n";
      break;
      default:
         echo "以上都没有";
   endswitch
?>

switch...Case 使用 break 语句

显然,您无需编写 break 来终止默认 case,它是 switch 构造中的最后一个 case

请看下面的例子 -


<?php
   $d = date("D");

   switch ($d){
      case "Mon":
         echo "今天是星期一";
      break;

      case "Tue":
         echo "今天是星期二";
      break;
      
      case "Wed":
         echo "今天是星期三";
      break;

      case "Thu":
         echo "今天是星期四";
      break;

      case "Fri":
         echo "今天是星期五";
      break;

      case "Sat":
         echo "今天是星期六";
      break;

      case "Sun":
         echo "今天是星期天";
      break;

      default:
         echo "不知道今天是哪一天?";
   }
?>

它将产生以下输出 -

今天是星期二