第3章 演算子 / 第2回 模擬試験
PHPの比較演算子に関する次の記述のうち、正しいものはどれか。
`==`は値のみを比較し、型は考慮しない。
`===`は値と型の両方が一致する場合に`true`を返す。
正解
PHP8では、数値文字列と数値の比較で常に文字列として比較される。
`<=>`(宇宙船演算子)は必ず真偽値(`bool`)を返す。
解説
`===`(厳密等価演算子)は、値だけでなく型も一致する場合にのみ`true`を返します(例: `1 === '1'`は型が異なるため`false`)。
他の選択肢が誤りである理由は次の通りです。
・`==`(等価演算子)は比較の際に型変換(型ジャグリング)を行うため、「型を考慮しない」という説明は不正確です。実際には内部的な変換ルールに従って型を揃えたうえで値を比較します。
・PHP8では、比較対象の文字列が「数値形式の文字列」(例: `"123"`)の場合は数値として比較されますが、`"543a"`のような数値形式でない文字列の場合は、数値側を文字列に変換して文字列同士として比較されます。「常に文字列として比較される」は誤りです。
・宇宙船演算子`<=>`は、左辺が右辺より小さければ`-1`、等しければ`0`、大きければ`1`という`int`を返します。`bool`ではありません。
例:
```
var_dump(1 === '1'); // false(型が違う)
var_dump(1 == '1'); // true(値として等しい)
var_dump(2 <=> 5); // -1
```
(参照: 独習PHP 第4版 第3章 演算子 3.3節 比較演算子 p.101〜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; ```