web-dev-qa-db-ja.com

phpがnullか空か

私はPHPのNULLに関して質問があります。

  $a = '';
  if($a == NULL) {
      echo 'is null';
  }

$aが空の文字列のときにがnullになるのはなぜですか?それはバグですか?

174
Erin Tucker

あなたが探しているのは、

if($variable === NULL) {...}

PHPはNULL false 0 、およびを扱います。 ] 文字列が等しい。

304
Godwin

次の表に示すように、empty($foo)$foo==nullと同等で、is_null($foo)$foo===nullと同じ機能を持ちます。この表には、nullの比較に関して注意が必要な値もいくつか示されています。 (ϕは未初期化変数を表します。)

私はempty()is_null()関数を使いません。単純比較を使用することは、あいまいさが少なく、速く、そしてきれいになります。

         empty    is_null 
         ==null  ===null  isset   array_key_exists
      ϕ |   T   |   T   |   F   |   F   
   null |   T   |   T   |   F   |   T   
     "" |   T   |   F   |   T   |   T   
     [] |   T   |   F   |   T   |   T
      0 |   T   |   F   |   T   |   T      
  false |   T   |   F   |   T   |   T   
   true |   F   |   F   |   T   |   T   
      1 |   F   |   F   |   T   |   T   
     \0 |   F   |   F   |   T   |   T   
202
PHPst

=====を確認してください

'' == NULLはtrueを返します
0 == NULLはtrueを返します
false == nullはtrueを返します

どこで

'' === NULLはfalseを返します
0 === NULLはfalseを返します
false === NULLはfalseを返します

26
jancha

いいえ、それはバグではありません。 ==テーブルとの緩い比較 (2番目のテーブル)を見てください。最初の列の各値を他の列の値と比較します。

    TRUE    FALSE   1       0       -1      "1"     "0"     "-1"    NULL    array() "php"   ""

    [...]    

""  FALSE   TRUE    FALSE   TRUE    FALSE   FALSE   FALSE   FALSE   TRUE    FALSE   FALSE   TRUE

false""NULLまたは0と比較した空の文字列""がtrueになることがわかります。

is_nullを使いたくなるかもしれません[docs]代わりに 、または厳密な比較(3番目の表)。

16
Felix Kling

これバグではありませんがPHP通常の動作です。 PHP内の==演算子が型をチェックしないために起こります。

'' == null == 0 == false

値が同じ型かどうかも確認したい場合は、代わりに===を使用してください。この違いを詳しく調べるには、 公式文書 を読んでください。

12
Aurelio De Rosa

==を使用すると、phpは空の文字列または配列をnullとして扱います。 nullemptyを区別するには、===またはis_nullを使います。そう:

if($a === NULL)またはif(is_null($a))

8
dayuloli

empty - http://php.net/manual/en/function.empty.php を使ってください。

例:

$a = '';
if(empty($a)) {
    echo 'is empty';
}
0
ewizard