簡體   English   中英

PHP 語句 switch case 禮儀

[英]PHP statement switch case etiquette

1

switch($app_id){
    case (
        $app_id == 1 || 
        $app_id == 2
    ):
        //do something
    break;
    case 3:
        //do something else
    break;
}

2

switch($app_id){
    case 1:
    case 2: 
        //do something
    break;
    case 3:
        //do something else
    break;
}

除了禮節,有沒有更好的理由讓你不做第二個,或者完全取決於你?

我問的原因是因為在 php.net 中它說你不應該做后者,無論你是否願意(來自 php.net 的片段說你不應該在沒有中斷的情況下做案例,無論你是否想要堆疊查詢或不是)

<?php
switch ($i) {
case 0:
    echo "i equals 0";
case 1:
    echo "i equals 1";
case 2:
    echo "i equals 2";
}
?>

在這里,如果 $i 等於 0,PHP 將執行所有的 echo 語句! 如果 $i 等於 1,PHP 將執行最后兩個 echo 語句。 只有當 $i 等於 2 時,您才會得到預期的行為(將顯示“i 等於 2”)。因此,重要的是不要忘記 break 語句(即使在某些情況下您可能希望避免有意提供它們) )。

到目前為止的原因:

  1. 回答:如果我省略了一個中斷以允許一個失敗,我會發表評論說發生了一個失敗,這樣下一個出現的人就不會“啊哈!錯過了休息!BOOM” –馬克·B

    我的評論:很好的理由馬克! 這是禮儀的流浪漢......如果你打破它,人們還沒有准備好被他們隊長的正確性所欺騙。

  2. 答案: @JamesT:您所閱讀的內容只會警告您不要錯誤地忘記它,因為這是一個非常常見的編程錯誤。 如果它是有意的,你可以做到。 ——宇智波斑

    我的評論:我認為禮儀勝過這個問題。 一定要打斷,因為這可能會讓下一個人編輯你的代碼感到困惑; 唉,如果你足夠明智,可以發表評論來解釋你打算錯過它,那就去做吧

  3. 回答:你錯過了理解他們的情緒。 他們談論的是在每種情況下都有單獨的操作時省略中斷,例如我的第一個示例。 對案例進行分組,例如我的示例一中的 4 和 5,如果操作完全跨案例共享,則完全可以並且鼓勵。 – 羅科德

    我的評論:我同意這句話可能被誤讀。 除了讓未來的開發人員懷疑您是否有意放棄突破之外,我認為沒有任何理由。

好吧,您的第一個示例可能不會按照您期望的方式運行。

switch($app_id){
    case (
        $app_id == 1 || 
        $app_id == 3
    ):
        //do something
    case 3:
        //do something else
    break;
}

這將評估條件並解析為TRUEFALSE值,然后將其與$app_id進行比較。 在這種(非常具體的)情況下,您將獲得預期的結果,但這不是正確的做法! .

使用 switch case 時,您展示的第二種方法更好。


break 語句用於在滿足后退出案例。 您可以省略它,並執行所有后續案例。 如果這是預期的行為,那么以這種方式實現它是非常好的。 不要忘記添加注釋以澄清它。 善待未來的你!

下面的 switch 和if($i == 1 || $i == 2 || $i == 3)

switch($i) {
  case 1:
    echo "1";
  case 2:
    echo "2";
  case 3:
    echo "3";
    break;
}

假設 $i == 1,上面的代碼實際上會輸出“123”——這通常是不正確的。

正確示例:

if ($i == 1) // Do something
else if ($i == 2) // Do something else, etc

是相同的

switch(i) {
  case 1:
    echo "1";
    break;
  case 2:
    echo "1";
    break;

  case 4:
  case 5:
    echo "This is 4 and 5";
    break;
}

上面的代碼只會為 $i == 1 輸出 "1"

有些人確實將他們的案例包含在 {} 中,但這純粹是為了可讀性,不會強制中斷。

關於您的case (4 || 5) - 這將導致語法錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM