switch 结构

switch 语句

switch 案例

如何工作 这里是一个简单的游戏示例,用户输入 $user_command 后,根据不同的输入执行不同的函数:

if ($user_command == "n") {
  go_north();
} else if ($user_command == "e") {
  go_east();
} else if ($user_command == "s") {
  go_south();
} else if ($user_command == "w") {
  go_west();
} else {
  do_something_else();
}

显然,这里有很多重复的代码。switch 语句可以帮助你避免这些冗余代码。它允许程序员反复将某个变量的值与一组可能的值进行比较,并根据结果执行代码。下面是使用 switch 语句的语法,和使用 if 语句编写的相同代码进行对比:

if 语句风格 switch 语句风格
```php ```php
if ($firstvariable == 'comparison1'  
doSomething(); case 'comparison1':
doSomethingElse(); case 'comparison2':
} else if ($firstvariable == 'comparison3') { doSomething();
doAThirdThing(); doSomethingElse();
} else { break;
launchMissiles(); case 'comparison3':
} doAThirdThing();
// Look at how much switch case saves you! break;
``` default:
  launchMissiles();
  break;
``` }
``` ```

switch 语句能够避免重复写 $firstvariable,并使代码看起来更简洁(尤其是当代码包含多个简单的 if 语句时)。回到我们的 Zorkmid 示例程序,我们可以将原始代码:

原始代码 vs switch-case 代码

原始代码:

if ($user_command == "n") {
  go_north();
} else if ($user_command == "e") {
  go_east();
} else if ($user_command == "s") {
  go_south();
} else if ($user_command == "w") {
  go_west();
} else {
  do_something_else();
}

switch-case 代码:

switch($user_command) {
  case 'n':
    go_north();
    break;
  case 'e':
    go_east();
    break;
  case 's':
    go_south();
    break;
  case 'w':
    go_west();
    break;
  default:
    do_something_else();
    break;
}

语法

switch($var) {
  case [value]:
    [code]
    break;
  
  case [value]:
    [code]
    break;
  
  ...
  
  default:
    [code]
    break;
}

在这个例子中,$var 是第一个要比较的变量。然后,这个变量会依次与每个 case 语句进行比较,直到找到匹配的项。此时,代码会执行,直到遇到 break 语句(这会让你完全退出 case 语句)。

使用 switch-case 语句的注意事项

使用 switch-case 时,别忘了在适当的地方使用 break!如果忘了,可能会导致不必要的函数执行。然而,在某些情况下,不使用 break 可能是有用的。请考虑以下示例:

switch ($n) {
  case 0:
  case 1:
  case 2:
    // 仅当 $n 为 0、1 或 2 时执行
    doSomethingForNumbers2OrSmaller();
    break;
  case 3:
    // 仅当 $n 为 3 时执行
    doSomethingForNumber3();
  default:
    // 仅当 $n 为 3 或更大时执行
    doSomethingForNumbers3OrBigger();
    break;
}

这种编码方式有时会受到批评,因为它并不总是能够清楚地说明代码的意图。而且,在不应该跳出 case 的情况下,可以考虑在 case 语句前添加注释,这样当其他人查看代码时,他们就会知道不应该添加 break。在这种情况下,良好的编程实践是为没有 breakcase 语句添加注释,以明确表示 break 是故意省略的:

switch ($n) {
  case 0:
    // Falls through!
  case 1:
    doSomethingForLargeNumbers();
    // Falls through!
  case 2:
    doSomethingForSmallerNumbers();
    break;
  …
}

更多信息

最后修改: 2025年01月9日 星期四 22:33