我在PHP中有一个关于NULL
的问题:
$a = '';
if($a == NULL) {
echo 'is null';
}
当$a
为空字符串时,为什么会看到为空?这是一个错误吗?
答案 0 :(得分:300)
您正在寻找的是:
if($variable === NULL) {...}
PHP将 NULL , false , 0 和 empty 字符串视为相等。
答案 1 :(得分:202)
如下表所示,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
答案 2 :(得分:26)
检查==
vs ===
'' == NULL
会返回真实的
0 == NULL
会返回真实的
false == null
将返回true
其中
'' === NULL
会返回false
0 === NULL
将返回false
false === NULL
将返回false
答案 3 :(得分:16)
不,这不是一个错误。查看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]或严格比较(第三张表)。
答案 4 :(得分:12)
这不是一个错误,但PHP正常行为。这是因为PHP中的==
运算符不检查类型。
'' == null == 0 == false
如果您还想检查值是否具有相同类型,请改用===
。要深入研究这种差异,请阅读official documentation。
答案 5 :(得分:8)
如果使用==
,php会将空字符串或数组视为null
。要区分null
和empty
,请使用===
或is_null
。所以:
if($a === NULL)
或if(is_null($a))
答案 6 :(得分:0)
使用empty
-http://php.net/manual/en/function.empty.php。
示例:
$a = '';
if(empty($a)) {
echo 'is empty';
}
答案 7 :(得分:0)
答案 8 :(得分:0)
如果某人正在与
打交道,只需添加,如果与
打交道,这将起作用。
首先将其替换为str_replace()
,然后将其替换为empty()
empty(str_replace(" " ,"" , $YOUR_DATA)) ? $YOUR_DATA = '--' : $YOUR_DATA;
答案 9 :(得分:0)
NULL 表示没有值的变量。要检查变量是否为NULL,可以使用is_null($var)
或与 NULL 进行比较(===
)。但是,如果未定义变量,则两种方法都会生成警告。与isset($var)
和empty($var)
类似,可以用作函数。
var_dump(is_null($var)); // true
var_dump($var === null); // true
var_dump(empty($var)); // true