第2章 PHPの基本 / 第5回 模擬試験
次のコードの実行結果として正しいものはどれか。 ```php $bool1 = (bool) ""; $bool2 = (bool) "0"; $bool3 = (bool) "0.0"; var_dump($bool1, $bool2, $bool3); ```
bool(false) bool(false) bool(true)
正解
bool(false) bool(false) bool(false)
bool(true) bool(true) bool(true)
bool(false) bool(true) bool(true)
解説
`bool`型へのキャストでは、「偽(`false`)」とみなされる値が明確に決まっています。空の文字列`""`と、文字列としての`"0"`はどちらも`false`になりますが、それ以外の空でない文字列(`"0.0"`のように見た目が数値の`0`に近くても)はすべて`true`になります。
・`(bool) ""`(空文字列) → `false`
・`(bool) "0"`(文字列の"0") → `false`
・`(bool) "0.0"`("0"ではない別の文字列) → `true`
例:
```
var_dump((bool) ""); // bool(false)
var_dump((bool) "0"); // bool(false)
var_dump((bool) "0.0"); // bool(true)("0"と完全一致しないためtrue)
```
`bool`にキャストしたときに`false`になるのは、`false`, `0`, `0.0`, `""`, `"0"`, 空配列`[]`, `null`の7パターンのみで、それ以外はすべて`true`になる、という一覧をセットで覚えておくと役立ちます。
(参照: 独習PHP 第4版 第2章 PHPの基本 2.5.2節 明示的な変換(キャスト) p.83〜84)