回答:
あなたが探しているのは:
if($variable === NULL) {...}
に注意してください===
。
使用==
した場合と同様に、PHPはNULL、false、0、空の文字列、空の配列を同じものとして扱います。
== null
nullや未定義だけでなく、空の文字列と一致するのか疑問に思っていました。
$a = ''
は空string
、false
はブール値、$a = 0;
整数、null
タイプはnull
です。OPが言っていることは、PHPはそれらを値の「同じ」としてスレッド化するが、タイプの「同じ」としてスレッド化しないということです。したがって、厳密な ===
チェックではタイプもチェックし、別のものを使用すると失敗します。これが、戻り値の一貫性を保つ必要がある理由です。通常、のようなメソッドで文字列を返す場合getName()
、null
空の場合は取得しないでください。空の文字列 $user->getName() === ''
または$user->getId() === 0
orの可能性が高くなり$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===
'' == NULL
trueを返す、true
0 == NULL
を返す、true
false == null
を返す
どこに
'' === 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
、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
注意してください==
)