はじめまして、3月に入社した太田です。
以前はほぼJAVAオンリーで開発を行っていたのですが、ウノウに入社してからphpを使うようになりました。そんな中で一番戸惑った暗黙の型変換、特にnullの扱いについて、非常に基本的な事ではありますが備忘も兼ねてまとめておこうと思います。
nullをnullと比べてみるif (null == null) { echo '出力される'; } if (null === null) { echo '出力される'; }
上記の条件式はいずれもtrueを返します。
nullとbooleanを比べてみるif (null) { echo '出力されない'; } if (null == false) { echo '出力される'; } if (null === false) { echo '出力されない'; }
暗黙の型変換によって、2番目のみtrueが返されます。3番目では厳密に型チェックを行うため、型変換が行われずfalseとなります。
nullとintegerを比べてみるif (null == 0) { echo '出力される'; } if (null === 0) { echo '出力されない'; }
暗黙の型変換によって、1番目のみtrueが返されます。2番目では厳密に型チェックを行うため、型変換が行われずfalseとなります。
nullとStringを比べてみるif (null == '') { echo '出力される'; } if (null === '') { echo '出力されない'; }
integerと同様、暗黙の型変換によって、1番目のみtrueが返されます。2番目では厳密に型チェックを行うため、型変換が行われずfalseとなります。
以上、ざっくりとですがまとめてみました。この記事を書いている途中で他の型との比較の際にどういう順番で変換されるのか少し気になりましたが、それはまた時間がある時に調べてみたいと思います。自分の理解が間違っている点がありましたらご指摘いただければ幸いです。
ちなみに、弊社ではコーディング規約として「変数が null かどうかを用いる場合は is_null() 関数を使用するべきである」としており、明確な理由が無い限りは型チェックを行うというスタンスでおります。