第4章 制御構文 / 第5回 模擬試験

次のコードの実行結果として正しいものはどれか。 ```php $fruit = "banana"; switch ($fruit) { case "apple": case "banana": print "yellow or red"; break; case "grape": print "purple"; break; default: print "unknown"; } ```

yellow or red 正解
purple
unknown
何も出力されない
解説
`switch`文で、`case "apple":`の直後に処理を書かず、そのまま次の`case "banana":`に続けると、「`"apple"`にも`"banana"`にもマッチした場合は同じ処理を実行する」というグループ化ができます(フォールスルーを逆手に取った書き方です)。 `$fruit`は`"banana"`なので`case "banana":`にマッチし、`print "yellow or red";`が実行された後`break;`でswitch文を抜けます。 例: ``` $fruit = "banana"; switch ($fruit) { case "apple": case "banana": print "yellow or red"; break; case "grape": print "purple"; break; default: print "unknown"; } // 出力: yellow or red ``` このように「処理を書かずに次の`case`へフォールスルーさせる」書き方は、複数の値で同じ処理をしたい場合の定番のイディオムです。 (参照: 独習PHP 第4版 第4章 制御構文 4.1.7節 switch命令 p.133〜135)

あわせて読みたい解説記事