我有一个关于PHP和NULL一个奇怪的问题,请参见下面的代码:php为空或空?
$a = '';
if($a == NULL) {
echo 'is null';
}
为什么我看到为空?如果$a
是空的,那是一个错误吗?谢谢。
我有一个关于PHP和NULL一个奇怪的问题,请参见下面的代码:php为空或空?
$a = '';
if($a == NULL) {
echo 'is null';
}
为什么我看到为空?如果$a
是空的,那是一个错误吗?谢谢。
什么你要找的是:
if($variable === NULL) {...}
PHP对待NULL,假,和空字符串平等。
这个不是一个错误,但PHP的正常行为。这是因为PHP中的==
运算符不检查类型。
'' == null == 0 == false
如果您还想检查值具有相同的类型,使用===
代替。深入研究这种差异,请阅读official documentation。
不,这不是一个错误。看一看在Loose comparisons with == table(第二个表),这显示了每个值在第一列与其他列的值进行比较的结果是:
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]代替,或者使用严格比较(第三个表格)。
松散的比较表似乎表明,比较0 ==“PHP”或“PHP”== 0都将产生真实。那里发生了什么? – Robert
@Robert:当转换为字符串时,不以数字开头的字符串被转换为“0”:http://codepad.org/qi40SG3E。所以'(int)“php”== 0“。 –
@Robert:我的意思是*“投到**号码**”时*。 –
检查==
VS ===
'' == NULL
将返回true
0 == NULL
将返回true
false == null
将返回true
其中作为
'' === NULL
将返回false
0 === NULL
会返回false
false === NULL
将返回false
如下表中所示,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
如果使用==
,PHP把一个空字符串或数组作为null
。要区分null
和empty
,请使用===
或is_null
。所以:
if($a === NULL)
或if(is_null($a))
if($ a === NULL) – Caster
假,你的条件只匹配未初始化和空'''$ variable'''。 你想要的其实是:'''$ variable == null'''(注意''== ==''') –
@ThomasLAURENT,这就是OP所要找的,他们想知道为什么'== null '是匹配空字符串,而不仅仅是null或undefined。 – Godwin
Oups我的错误,但你的最后一句话让我认为NULL,false,0和**严格相等**这是错误的,对于误解抱歉。 –