PHP 编程/switch 结构
外观
< PHP 编程
(重定向自 PHP 编程/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 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;
…
}