回答:
あなたが探しているのは:
if($variable === NULL) {...}
に注意してください===。
使用==した場合と同様に、PHPはNULL、false、0、空の文字列、空の配列を同じものとして扱います。
== nullnullや未定義だけでなく、空の文字列と一致するのか疑問に思っていました。
$a = ''は空string、falseはブール値、$a = 0;整数、nullタイプはnullです。OPが言っていることは、PHPはそれらを値の「同じ」としてスレッド化するが、タイプの「同じ」としてスレッド化しないということです。したがって、厳密な ===チェックではタイプもチェックし、別のものを使用すると失敗します。これが、戻り値の一貫性を保つ必要がある理由です。通常、のようなメソッドで文字列を返す場合getName()、null空の場合は取得しないでください。空の文字列 $user->getName() === ''または$user->getId() === 0orの可能性が高くなり$user->isActive === falseます。意図された動作!
次の表に示すように、はとempty($foo)同等で、$foo==nullとis_null($foo)同じ機能を持っています$foo===null。この表は、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
empty()とis_null()機能を使用することはありません。単純な比較を使用すると、あいまいさが減り、高速でクリーンになります。特に、一致する中括弧が少なくなります。
例if($x==null || $y==null)対if(is_null($x) || is_null($y))
==nullおよび===null。
チェック==vs===
'' == NULLtrueを返す、true
0 == NULLを返す、true
false == nullを返す
どこに
'' === NULLfalse
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、0、NULLまたは""真が得られます。
代わりにis_null [docs]を使用するか、厳密な比較(3番目の表)を使用できます。
使用empty- http://php.net/manual/en/function.empty.php。
例:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable。あなたが望むものは実際にあります:(に$variable == null注意してください==)