第3章 演算子 / 第1回 模擬試験

次のコードの【 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 ```

【1】【4】
【6】【7】
【1】【4】【6】
【1】【2】【4】【7】
【1】【4】【6】【7】 正解
解説
各式を実機で評価すると次の通りです。 ・【1】`"php" > "perl"` → 3文字目で`h`(0x68) > `e`(0x65)となり`true`。 ・【2】`0 != "0"` → PHP8では数値`0`と文字列`"0"`を`!=`で比較すると数値として比較され等しいため`false`。 ・【3】`5 - 6 + 1` → 計算結果は`0`で、`bool`として評価すると`false`。 ・【4】`"false"` → 空文字列でも`"0"`でもない文字列は真として評価され`true`。 ・【5】`0 + false` → `false`は数値コンテキストで`0`として扱われ、結果`0`は`false`。 ・【6】`"543a" < 56` → PHP8では、数値形式でない文字列(`"543a"`は末尾に`a`があり非数値文字列)と数値の比較は数値側を文字列に変換して行われるため、文字列同士の比較になり`"543a" < "56"`は`true`。 ・【7】`abs(-6) > 10 / 2` → `abs(-6)=6`、`10/2=5`で`6 > 5`は`true`。 したがって`true`になるのは【1】【4】【6】【7】の組み合わせです。 実機で確認: ``` var_dump("php" > "perl"); // true var_dump(0 != "0"); // false var_dump("543a" < 56); // true ``` PHP8での非数値文字列と数値の比較ルール変更は頻出ポイントです。PHP7までは`"543a"`が数値`543`として扱われ結果が変わっていたので注意してください。 (参照: 独習PHP 第4版 第3章 演算子 3.3節 比較演算子 p.101〜108)