第3章 演算子 / 第5回 模擬試験
次のコードの実行結果として正しいものはどれか。 ```php $x = 10; $y = ($x > 5) ? "big" : (($x > 0) ? "small" : "zero or negative"); print $y; ```
big
正解
small
zero or negative
エラーが発生する
解説
三項演算子`条件 ? 真の場合 : 偽の場合`は、条件が`true`の時点で「真の場合」の値がそのまま返され、「偽の場合」の式(この設問ではさらにネストされた三項演算子)は評価すらされません。
この設問では`$x > 5`(`10 > 5`)が`true`のため、外側の三項演算子は`"big"`を返し、内側にネストされた`($x > 0) ? "small" : "zero or negative"`は評価されずに終わります。
例:
```
$x = 10;
$y = ($x > 5) ? "big" : (($x > 0) ? "small" : "zero or negative");
print $y; // big
```
PHP8では、括弧なしで三項演算子を連続してネストする書き方は構文エラーになるため、この設問のように意図を明確にする丸括弧を必ず使う必要があります。
(参照: 独習PHP 第4版 第3章 演算子 3.3.5節 条件演算子 p.106〜109)
関連する問題
- 次のコードの【 A 】に入れた場合に`true`が返される組み合わせとして正しいものはどれか。 ```php if (【 A 】) { print("true"); } else { print("false"); } 【1】"php" > "perl" 【2】0 != "0" 【3】5 - 6 + 1 【4】"false" 【5】0 + false 【6】"543a" < 56 【7】abs(-6) > 10 / 2 ```
- 次のコードの実行結果として正しいものはどれか。 ```php $a = 2 + 3 * 6; $b = $a % 7; $c = $b ** 2; print($c); ```
- PHPの論理演算子に関する次の記述のうち、正しいものはどれか。
- PHPの論理演算子に関する次の記述のうち、誤っているものはどれか。
- 次のコードの実行結果として正しいものはどれか。 ```php $a = 10; $b = 3; print $a / $b . " " . intdiv($a, $b) . " " . $a % $b; ```