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;
…
}