- PHP
-
2025-05-15
文字列”false”をbool型として扱いたい場合、単純にキャストしてしまうとfalse
の動作を期待しているのに意図とは反対にtrue
の動作となってしまうことがあるので注意が必要です。
例えば以下のように文字列”false”をbool型にキャストしてみます。
$bool = (bool)"false"; var_dump($bool);
するとどうでしょう。以下のような結果が返ってきます。
bool(true)
“false”をキャストしたのにtrue
となってしまいます。
この原因はキャストだとfalse
とは認識されず、”false”というただの文字列という認識となり空文字ではないという判断になるためです。
公式のマニュアルを見てみてください。
booleanへの変換
- boolean の false
- integer の 0 (ゼロ)
- float の 0.0 および -0.0 (ゼロ)
- 空の文字列 “”、 および文字列の “0”
- 要素の数がゼロである 配列
- unit 型 NULL (値がセットされていない変数を含む)
- bool 型へキャストするように動作がオーバーロードされた内部オブジェクト。 例: 属性がない空要素から作成された SimpleXML オブジェクト。
上記以外は全てtrue
とみなされます。
ではどうすれば良いでしょうか。
解決策としてfilter_var
関数を使います。
$bool_string = "false"; $bool = filter_var($bool_string, FILTER_VALIDATE_BOOLEAN); var_dump($bool);
上記のようにすると以下のように返ってきます。
bool(false)
filter_var
関数を使い、第2引数にFILTER_VALIDATE_BOOLEAN
を指定することで”1″, “true”, “on”, “yes”の場合、true
を、それ以外は全てfalse
を返してくれます。
$_POST
や$_GET
の値を利用するときはfilter_input
関数を使ってください。
$bool = filter_input(INPUT_POST, "bool_string", FILTER_VALIDATE_BOOLEAN);
この記事がお役に立ちましたらシェアお願いします

5 views