-1

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

エチケットとは別に、あなたが2番目をしないより良い理由がありますか、それとも完全にあなた次第ですか?

私が尋ねる理由は、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は最後の2つのechoステートメントを実行します。$ iが2に等しい場合にのみ、期待される動作が得られます('i equals 2'が表示されます)。したがって、特定の状況下で意図的に提供することを避けたい場合でも、 breakステートメントを忘れないことが重要です。 )。

これまでの理由:

  1. 答え:フォールスルーを可能にするために休憩を省略した場合、フォールスルーが発生しているとコメントを入れて、次の人が「ああ!休憩がない!ブーム」にならないようにします–マークB

    私のコメント:素晴らしい理由マーク!それはエチケットの尻です..あなたがそれを破ると、人々は彼らの船長の正しさによってうんざりする準備ができていません。

  2. 回答: @JamesT:非常に一般的なプログラミングエラーであるため、読んだ内容は誤って忘れてしまったことを警告するだけです。それが意図されている場合、あなたはそれを行うことができます。–うちはマダラ

    私のコメント:それなら、エチケットがこの質問に勝つと思います。次の人があなたのコードを編集するのを混乱させるかもしれないので、休憩を入れてください。悲しいかな、あなたがそれを見逃すつもりだったことを説明するためにコメントを入れるのに十分賢明であるならば、それをしてください

  3. 答え:あなたは彼らの感情を理解するのを逃しています。私の最初の例のように、ケースごとに個別のアクションがある場合、彼らは休憩を省略することについて話している。例1の私の4と5のようなケースのグループ化は完全に問題なく、アクションがケース間で完全に共有されている場合は推奨されます。– Rawkode

    私のコメント:私はこの文章が誤読される可能性があることに同意します。将来の開発者を混乱させて、あなたがブレイクアウトを残すつもりだったのかどうかを疑問視する以外に理由はありません。

4

2 に答える 2

1

さて、あなたの最初の例はあなたがそれを期待するように振る舞わない可能性があります。

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

これにより、条件が評価され、TRUEまたはのFALSE値に解決され、次にと比較され$app_idます。この(非常に具体的な)ケースでは、期待どおりの結果が得られますが、これは正しい方法ではありません。

スイッチケースを使用する場合は、2番目に表示したアプローチの方が適しています。


breakステートメントは、ケースが満たされると、ケースを終了するために使用されます。省略して、以降のすべてのケースを実行できます。それが期待される動作である場合は、そのように実装することはまったく問題ありません。それを明確にするためにコメントを追加することを忘れないでください。未来のあなたに親切にしてください!

于 2012-11-20T16:44:51.133 に答える
0

以下のスイッチはと同じです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)-これは構文エラーを引き起こします。

于 2012-11-20T16:44:32.997 に答える