第4章 制御構文 / 第3回 模擬試験
次のコードの実行結果として正しいものはどれか。 ```php $score = 75; $result = match (true) { $score >= 90 => "A", $score >= 70 => "B", $score >= 50 => "C", default => "D", }; print $result; ```
A
B
正解
C
D
解説
`match (true) { ... }`は、各アームの条件式を上から順に評価し、最初に`true`になったアームの値を返す書き方です(`switch`のフォールスルーとは異なり、マッチしたアームの処理だけが実行されます)。
`$score = 75`の場合、`$score >= 90`は`false`、次の`$score >= 70`は`75 >= 70`で`true`となるため、そこで評価が止まり`"B"`が返されます(以降の`$score >= 50`などは評価されません)。
例:
```
$score = 75;
$result = match (true) {
$score >= 90 => "A",
$score >= 70 => "B",
$score >= 50 => "C",
default => "D",
};
print $result; // B
```
この`match (true)`パターンは、範囲による条件分岐を`switch`より簡潔かつ厳密な比較で書ける便利なイディオムです。
(参照: 独習PHP 第4版 第4章 制御構文 4.1.9節 match式 p.136〜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の条件分岐に関する次の記述のうち、正しいものはどれか。