第4章 制御構文 / 第4回 模擬試験
PHPの`switch`命令の判定方法に関する次の記述のうち、正しいものはどれか。
`switch`文の比較は、デフォルトで緩やかな比較(`==`相当)で行われる。
正解
`switch`文は、`case`の値に変数を使用することができない。
`switch`文の`default`は必ず最初に記述しなければならない。
`switch`文は文字列の値では分岐できない。
解説
`switch`文は、各`case`の値との比較に、デフォルトで緩やかな比較(`==`相当)を使用します。そのため、型が異なる値同士でも一致とみなされてしまう場合があり、意図しない分岐の原因になることがあります(PHP8で追加された`match`式は、この問題を避けるために厳密な比較`===`を採用しています)。
他の選択肢が誤りである理由は次の通りです。
・`switch`文の`case`には、リテラル値だけでなく変数や式も指定できます。
・`switch`文の`default`は、記述する位置に決まりはなく、先頭・末尾・途中のどこにでも書けます。
・`switch`文は数値だけでなく、文字列の値でも分岐できます。
例:
```
switch ('1') {
case 1: // 緩やかな比較のため、文字列'1'と数値1がマッチする
echo 'matched';
break;
}
```
(参照: 独習PHP 第4版 第4章 制御構文 4.1.8節 補足 switch命令の判定方法 p.136)
関連する問題
- 次のコードの実行結果として正しいものはどれか。 ```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の条件分岐に関する次の記述のうち、正しいものはどれか。