第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)
関連する問題
- 次のコードの実行結果として正しいものはどれか。 ```php $num = ['zero', 'one', 'three']; $num[3] = 'four'; $num[2] = 'two'; print ('【loop_A】'); for ($i = 0, $count_num = count($num); $i < $count_num; $i++) { print ($num[$i] . ','); } print ('【loop_B】'); foreach ($num as $i => $n) { print ($i . ','); } ```
- PHPの条件分岐に関する次の記述のうち、誤っているものはどれか。
- 次のコードの実行結果として正しいものはどれか。 ```php $i = 1; while ($i <= 5) { print $i; $i++; } ```
- PHPのループ制御に関する次の記述のうち、正しいものはどれか。
- PHPの条件分岐に関する次の記述のうち、正しいものはどれか。