私はPHPのNULL
に関して質問があります。
$a = '';
if($a == NULL) {
echo 'is null';
}
$a
が空の文字列のときにがnullになるのはなぜですか?それはバグですか?
あなたが探しているのは、
if($variable === NULL) {...}
PHPはNULL、 false 、 0 、およびを扱います。 ] 文字列が等しい。
次の表に示すように、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
==
と===
を確認してください
'' == NULL
はtrueを返します0 == NULL
はtrueを返しますfalse == null
はtrueを返します
どこで
'' === NULL
はfalseを返します0 === NULL
はfalseを返しますfalse === NULL
はfalseを返します
いいえ、それはバグではありません。 ==テーブルとの緩い比較 (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番目の表)。
これはバグではありませんがPHP通常の動作です。 PHP内の==
演算子が型をチェックしないために起こります。
'' == null == 0 == false
値が同じ型かどうかも確認したい場合は、代わりに===
を使用してください。この違いを詳しく調べるには、 公式文書 を読んでください。
==
を使用すると、phpは空の文字列または配列をnull
として扱います。 null
とempty
を区別するには、===
またはis_null
を使います。そう:
if($a === NULL)
またはif(is_null($a))
empty
- http://php.net/manual/en/function.empty.php を使ってください。
例:
$a = '';
if(empty($a)) {
echo 'is empty';
}