【PHP】「空」と「0」の判定について

  • 2020年6月5日
  • PHP

久しぶりに 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 の判定で躓いた件についてでした。
こんなうっかりミスをする人は少ないとは思いますが…ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG