開關

switch 結構執行與一系列 if 語句相同的功能,但可以用更少的程式碼行完成工作。將 switch 語句中定義的要測試的值與每個 case 語句中的值進行相等性比較,直到找到匹配並執行該塊中的程式碼。如果找不到匹配的 case 語句,則執行 default 塊中的程式碼(如果存在)。

casedefault 語句中的每個程式碼塊都應以 break 語句結束。這將停止 switch 結構的執行,並在之後立即繼續執行程式碼。如果省略 break 語句,則執行下一個 case 語句的程式碼,即使沒有匹配項也是如此。如果忘記了 break 語句,這可能會導致意外的程式碼執行,但在多個 case 語句需要共享相同程式碼的情況下也很有用。

switch ($colour) {
case "red":
    echo "the colour is red";
    break;
case "green":
case "blue":
    echo "the colour is green or blue";
    break;
case "yellow":
    echo "the colour is yellow";
    // note missing break, the next block will also be executed
case "black":
    echo "the colour is black";
    break;
default:
    echo "the colour is something else";
    break;
}

除了測試固定值之外,還可以通過向 switch 語句和 case 語句的任何表示式提供布林值來強制構造測試動態語句。請記住使用第一個匹配值,因此以下程式碼將輸出“超過 100”:

$i = 1048;
switch (true) {
case ($i > 0):
    echo "more than 0";
    break;
case ($i > 100):
    echo "more than 100";
    break;
case ($i > 1000):
    echo "more than 1000";
    break;
}

有關使用 switch 構造時鬆散鍵入的可能問題,請參閱 Switch Surprises