empty、isset、is_null、trueの違い(PHP)

ここらへんで、emptyとisset等の使い方を自分なりに整理して、ついでに覚えようと思う。いつまでもどれを使うかで悩んでいる場合ではないだろうから。。。とりあえずメモ程度

メソッド 0(ゼロ) 空文字"" null 未定義 それ以外
empty() true true true true false
isset() true true false false true
trueは、1
falseは、0と空文字とnull

空文字""は何も入力されていないという意味ではない。nullがその意味。

ゼロ、空文字""、nullがfalseとして扱われ、false以外が、trueとして扱われる。

is_nullは、「null」がtrue、それ以外がfalseを返す。

issetは、「0(ゼロ)、空文字""、それ以外」がtrue、「nullとその変数が定義されていない時」にfalseを返す。

emptyは、「0(ゼロ)、空文字""、null、変数が定義されていない時」がtrue、「それ以外」はfalseを返す。0でもtrueに注意。

strlenは、「データの長さが0」ならtrue、それ以外がfalseを返す。

if($a)は、if($a==true)の略、if(!$a)は、if($a==false)の略

if(isset($_POST))は、変数が定義されていてnullでない場合。if(!empty($_POST))は、0、""、null、変数定義されている場合。0と""が含まれるか含まれないかの違いなのかな。

何にしろこうなると、空文字""とnullの違いが何なのかがわからなくなる。実験してみたらフォームが未入力であったときの$_POSTはnullでなく空文字""だった(is_nullが適用されなかったため)

あと配列全体に対してこれらを使用する場合、配列の中身[0,0,0]であってもemptyではなく、あくまで配列の要素数(count)があるかないかという形で判断されるようだ。

結論として、フォームデータを$_POST等で受け取った時のif文は、配列全体があるかないかを調べられればいいので、emptyでもissetでもtrueでもイイような気がする。ただ、配列の中身$_POST['name']等のときは、0が入るのはシャクだがemptyかtrueがいいのではなかろうか。また、未定義の変数を初めてif文で使う場合は、emptyがいいのかもしれない。

フォームの中身チェックは、空文字''で送信される以上、全体をfalseとすることができず、1つ1つの中身をチェックする必要がある。(たぶん)

コメントor補足情報orご指摘あればをお願いします。

(件名or本文内でキーワード検索できます)



  • << 前のページ
  • 次のページ >>
ページトップへ