PHP - switch 语句



PHP 中的 switch 语句可以作为一系列针对相同表达式的 if…else 语句的替代方案。假设你需要将表达式或变量与许多不同的值进行比较,并根据它等于哪个值来执行不同的代码段。在这种情况下,你会使用多个 if…elseif…else 结构。

但是,这种结构可能会使代码变得相当混乱且难以理解。为了简化此类代码,你可以使用 PHP 中的 switch case 结构,它提供了一种更紧凑的替代方案,以避免冗长的 if..elseif..else 代码块。

下面的 PHP 脚本使用了 if elseif 语句:

if ($x == 0) {
   echo "x equals 0";
} elseif ($x == 1) {
   echo "i equals 1";
} elseif ($x == 2) {
   echo "x equals 2";
}

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

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

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

  • switch 语句逐行执行花括号内的语句。

  • 如果找到一个 case 语句,其表达式的计算结果与 switch 表达式的值匹配,则 PHP 开始执行语句,直到 switch 块结束,或者第一次遇到 break 语句。

  • 如果你没有在 case 的语句列表末尾编写 break 语句,PHP 将继续执行下一个 case 的语句。

示例

尝试通过删除 break 语句来运行上面的代码。如果 x 的值为 0,你会发现输出包括 "x equals 1" 和 "x equals 2" 行。

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

它将产生以下 输出

x equals 0
x equals 1
x equals 2

因此,务必确保每个 case 块都以 break 语句结束。

switch 中的 default case

一个特殊的情况是 default case。此 case 匹配任何其他 case 未匹配的内容。使用 default 是可选的,但如果使用,它必须是花括号内的最后一个 case。

你可以组合多个 case 来模拟多个用 运算符组合的逻辑表达式。

<?php
   $x=10;
   switch ($x) {
      case 0:
      case 1:
      case 2:
         echo "x between 0 and 2 \n";
      break;
      default:
         echo "x is less than 0 or greater than 2";
   }
?>

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

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

switch-endswitch 语句

PHP 允许使用替代语法,用 switch-endswitch 语句来界定 switch 结构。以下 switch case 版本是可以接受的。

<?php
   $x=0;
   switch ($x) :
      case 0:
         echo "x equals 0";
      break;
      case 1:
         echo "x equals 1 \n";
      break;
      case 2:
         echo "x equals 2 \n";
      break;
      default:
         echo "None of the above";
   endswitch
?>

在 Switch…Case 中使用 Break 语句

显然,你不需要编写 break 来终止 default case,因为它在 switch 结构中是最后一个 case。

示例

看看下面的例子:

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

   switch ($d){
      case "Mon":
         echo "Today is Monday";
      break;

      case "Tue":
         echo "Today is Tuesday";
      break;
	  
      case "Wed":
         echo "Today is Wednesday";
      break;

      case "Thu":
         echo "Today is Thursday";
      break;

      case "Fri":
         echo "Today is Friday";
      break;

      case "Sat":
         echo "Today is Saturday";
      break;

      case "Sun":
         echo "Today is Sunday";
      break;

      default:
         echo "Wonder which day is this ?";
   }
?>

它将产生以下 输出

Today is Monday
广告