1

次のようなタイト ループ内に switch ステートメントがあります。

switch(true) {
    case /*expensive comparison */:
    case /*another expensive comparison */:
    case /*different expensive comparison */:
        return true;
}
return false;

高価な比較のいずれかが正しいかどうかを確認しようとしていますが、1 つだけです。これを達成する他の方法があることは知っていますが、これは見栄えがよくきれいに見えます。本当の問題はexpensive comparison、true と評価された場合、それも実行さanother expensive comparisonれるのか、それともリターンにジャンプするのかということです。

編集: これは単純な or ステートメントで達成できることを認識していますが、理論のために知りたいです。

return /*expensive comparison */
         || /*another expensive comparison */
         || /*different expensive comparison */;
4

4 に答える 4

1

ブレークが使用されていない場合、PHP は、ケースが一致するかどうかに関係なく、他のすべての後続のケースからステートメントを実行します。

switch(1)
{
    case 1:
            echo 1;
    case 2:
            echo 2;
    case 3:
            echo 3;

    return 'done';
}

出力: 123

"...PHP は、switch ブロックの最後まで、または最初に break ステートメントが表示されるまで、ステートメントを実行し続けます。case のステートメント リストの最後に break ステートメントを記述しない場合、PHP は続行します。次のケースのステートメントを実行します。」

http://php.net/manual/en/control-structures.switch.php

于 2013-10-01T22:23:23.077 に答える