久しぶりに PHP のプログラムを修正した際、滅茶苦茶 初歩的なところで躓いたので、反省の意味も込めてまとめ。
思い込みとうっかりミスはやはり怖いものですね…。
何をやらかしたかというと、数値 0
が代入された変数を、下記の if
文で判定しました。
$param = 0; if ($param != '') { // 条件式が true の時に実行したい処理を記述 }
「変数 $param には 0 が代入されている、つまり空じゃない。なのに if 文が true
の時の処理が実行されない!」…という思い込みによるミスでした。
最初は別の箇所のミスを疑っていたのですが、上から順に確認していくと、$param != ''
の結果が false
を返しているのが分かり…発覚しました。
で、調べたところ、下記の記事が分かりやすかったので、是非ご参考にしてください
PHPの「0」とか「空」とか | Go-Nextブログ
https://www.go-next.co.jp/blog/web/php/12059/
こちらの記事に下記の記述がありました。
数値の0は “”、NULL、FALSEと等しい扱いです。
- 0 == “” ⇒ true
- 0 == FALSE ⇒ true
- 0 == NULL ⇒ true
まさに今日私がやらかしたやつ…!
ということで、今後は、is_null
を使うか、もしくは if ($param !== '')
と記述するようにします。
若干落ち込んでいると、後輩君がとても分かりやすい早見表が載っている Qiita の記事を教えてくれました。
PHP isset, empty, is_null の違い早見表 – Qiita
https://qiita.com/shinichi-takii/items/00aed26f96cf6bb3fe62
こちらも分かりやすいので、速攻ストックしました。
以上、PHP で変数が空かどうかをチェックした時に、空と 0 の判定で躓いた件についてでした。
こんなうっかりミスをする人は少ないとは思いますが…ご参考になれば幸いです。