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ご指摘あればをお願いします。
- << 前のページ
- 次のページ >>