「”==”と”===”」ってどう使い分けるんだっけ、とか「isset($var)やempty($var)とかif($var)」って存在チェックの時どれ使えばいいんだっけ、などもやもやする細かいTipsを簡単にまとめました。

「”==”と”===”」の使い分け

【参考】PHP 型の比較表(公式)

・”==”は緩い比較。文字列と数値など異なる型の値でもTRUEになるパターンがある。
・”===”は厳密な比較。型と値両方が一致しないとTRUEにならない。

参考の表を見て思ったんですが、”==”の比較ってTRUEになるのかFALSEになるのか全然直感的にわからないですね。。。
基本的には”==”は使わず、”===”を使う方が事故が少なくなりそうです。

「empty($x)」、「isset($x)」・・・値の存在チェック、どれ使う?

【参考】PHP 型の比較表(公式)

これはよーく迷ってしまうところです。PHPerな皆さんはどう対処しているのか気になるところです。これも参考の表を凝視すばわかります・・・が、難しいですね。
表から見えるポイントをまとめます。

  • 「empty($x)」と「if($x)」の結果は完全に対象(empty($x) === !$var)である
  • 「isset($x)」と「is_null($x)」の結果は完全に対象(isset($x) === !is_null($x))である

これは大きなポイントですね。
それならコードが読みやすいし、empty()とisset()だけ使って否定は「!」すればいいのでは、、?ってことになりますよね。

そうじゃないので、empty()とisset()はくせ者として何かと議論にあがってくるようです。
じゃあ何が違うのか。

  • 「empty($x)」と「isset($x)」は「$x」が未定義であってもエラーにならない
  • 「if($x)」と「is_null($x)」は「$x」が未定義の場合エラーになる

これらは引数が未定義かどうかで動作が変わってしまいます。
エラーにならない方が良いような気がしますが、未定義でもエラーにならないということは、引数が意図せず未定義だった場合に気付きにくいと言うこと。
エラーが出てくれれば、問題があっても開発段階で気が付けるかもしれません。

ということは・・・基本的に「if($x)」と「is_null($x)」を使う方がいいのかな?
読みやすいんでemptyとissetが好きなんですが・・・。

ここでは「empty($x)かif($x)か?」という疑問には「if($x)でしょう」という答えになりましたが、「じゃあif($x)は何がTRUEになってFALSEになるのか」ということに関してはPHP 型の比較表凝視必須レベルで超わかりにくいです。

このempty・isset問題とは別の意味で議論になっていますが、長くなりそうなのでまた機会があればということにします・・・^^;

参考サイト

こちらのサイトを参考にさせていただきました。
emptyを使わない方法がとても参考になります。

PHP で empty() を使うことを避けてみる

おわり