PHP 编程/switch 结构
外观
< PHP 编程
以下是一个简单游戏的示例,用户输入 $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 case 结构允许您避免这种冗余代码。它允许程序员反复将某个变量的值与一系列可能的值进行比较,并根据结果执行代码。这是 switch case 语句的语法,与使用 if 语句编写的相同代码相比。
if 语句风格 | switch case 风格 |
---|---|
if ($firstvariable == 'comparison1'
|| $firstvariable == 'comparison2') {
doSomething();
doSomethingElse();
} else if ($firstvariable == 'comparison3') {
doAThirdThing();
} else {
launchMissiles();
}
|
// Look at how much switch case saves you!
switch($firstvariable) {
case 'comparison1':
case 'comparison2':
doSomething();
doSomethingElse();
break;
case 'comparison3':
doAThirdThing();
break;
default:
launchMissiles();
break;
}
|
switch case 风格将使您免于重新键入 $firstvariable,并使您的代码看起来更简洁(尤其是,如果该代码是简单的 if 语句的较长链)。回到我们的 zorkmid 示例程序,我们有
原始代码 | 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($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 语句)。
不要忘记在需要断开时使用 break!如果您忘记了,您可能会运行您不想运行的函数。但是,在某些情况下,省略 break 可能有用。考虑这个例子
switch ($n) {
case 0:
case 1:
case 2:
//only executes, if $n is 0, 1 or 2
doSomethingForNumbers2OrSmaller();
break;
case 3:
//only executes, if $n is 3
doSomethingForNumber3();
default:
//only executes, if $n is 3 or above
doSomethingForNumbers3OrBigger();
break;
}
这种编码方式有时不被看好,因为它并不总是很清楚地表明代码的意图。此外,考虑对没有 break 的 case 语句进行注释;在下一个 case 语句之前,这样当其他人查看您的代码时,他们就知道不要添加 break。在这种情况下,建议在无 break 的 case 语句中添加注释,以便清楚地表明 break 是故意省略的。
switch ($n) {
case 0:
// Falls through!
case 1:
doSomethingForLargeNumbers();
// Falls through!
case 2:
doSomethingForSmallerNumbers();
break;
…
}