カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

文字列”false”をbool型にキャストするとtrueになる問題

文字列”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とみなされます。

ではどうすれば良いでしょうか。
続きを読む…»

10 views