phpにおけるnull 0 empty「」の違い

1183 ワード

空文字列(')とNULLの関係をまだ認識していない人も多いのではないでしょうか!!ここで説明しましょう:まず一例を見てみましょう:'==NULL;==NULL;実行すると1つ目はtrueで、2つ目はfalseです!
どうしてこんなことになったの?実はPHPでは中空文字列もNULLも値0で格納されています!
==は値のみを比較するので、最初はtrue!でも2つ目はなぜfalseなの!?なぜなら、PHPには変数がC言語の構造体で格納されており、この構造体にはzend_があるからである.uchar type;このようなメンバー変数は、変数のタイプを保存するために使用され、空の文字列のタイプはstringであり、NULLのタイプはNULLである.
この点はecho gettype(');とecho gettype(NULL);印刷してみましょう!===演算子は比較値だけでなく、比較タイプもあるので、2番目はfalseです!==は次の関数に等しいと言えます.
 function eq($var1, $var2) {

         if($var1 == $var2 && gettype($var1) == gettype($var2)) {

                 return 1;

         } else {

                 return 0;

         }

}

だから空の文字列(')、NULLと0は値が等しくてタイプが違います!注意:NULLは特殊なタイプです.どちらの場合もNULL 1.$var = NULL;
2. $var;
まとめ:
文字列もNULLも値0で格納されるのでnull==0=''です. 
null==0 null==empty(成立)
null==0 null==empty(成立しない)
以下すべて出力あり
if(0==null){
	echo "0null";
	echo "
"; } if(null==''){ echo "nullkong"; echo "
"; } if(null !== 0){ echo "abs null0"; echo "
"; } if('' == 0){ echo "empty0"; }