第4章 制御構文 / 第2回 模擬試験
PHPの条件分岐に関する次の記述のうち、正しいものはどれか。
`switch`文は`break`を省略すると、次のcaseの処理も実行される(フォールスルー)。
正解
`elseif`と`else if`(スペースあり)はPHPでは異なる意味を持つ。
三項演算子`?:`は、複数の条件を組み合わせることはできない。
`match`式は緩やかな比較(`==`)で条件を評価する。
解説
`switch`文で各`case`ブロックの末尾に`break`を書かないと、処理はそこで終わらず次の`case`(または`default`)の処理へそのまま流れ落ちます。これを「フォールスルー」と呼びます。
他の選択肢が誤りである理由は次の通りです。
・`elseif`(1語)と`else if`(2語、間にスペース)は、PHPでは全く同じ意味として扱われ、動作に違いはありません。
・三項演算子`?:`は、他の三項演算子や論理演算子と組み合わせて複数の条件を表現できます(ただしPHP 8では、丸括弧なしで三項演算子を連続してネストする書き方は禁止されているため、`($a ? $b : ($c ? $d : $e))`のように明示的に括弧を使う必要があります)。
・`match`式は`switch`と異なり、厳密な比較(`===`)で各アームの値と照合します。
例:
```
switch (2) {
case 1:
echo '1';
case 2:
echo '2';
case 3:
echo '3';
break;
default:
echo 'default';
}
// 出力: 23(case 2以降breakまでそのまま実行される)
```
(参照: 独習PHP 第4版 第4章 制御構文 4.1節 条件分岐 p.124〜138)
関連する問題
- 次のコードの実行結果として正しいものはどれか。 ```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 for ($i = 0; $i < 5; $i++) { if ($i == 2) { continue; } if ($i == 4) { break; } print $i; } ```