在PHP中,is_null "== NULL"和"=== NULL"之间有什么区别?

14

可能是重复问题:
php == vs === operator

我有以下代码片段,不明白为什么会用三种方式来评估NULL值。考虑变量$uploaded_filenames_array是未知的——我们不知道它是否仍然是一个数组或者为NULL。这就是我们要检查的内容。

//-----------------------------------------------
if (is_null($uploaded_filenames_array)){
    echo "is_null";
}
else{
    echo "is_NOT_null";
}
//-----------------------------------------------
if ($uploaded_filenames_array == NULL){
    echo "NULL stuff";
}
else{
    echo "not NULL stuff";
}
//-----------------------------------------------
if ($uploaded_filenames_array === NULL){
    echo "NULL identity";
}
else{
    echo "not NULL identity";
}
//-----------------------------------------------

我收到了以下的回复:

is_NOT_null 
NULL stuff 
not NULL identity 

请问有人能帮忙理解以下三种检查NULL的方式在程序上的区别吗?


is_null 等同于 "==="。 - Tarun
2
这个问题怎么会是 http://stackoverflow.com/questions/589549/php-vs-operator 的完全重复?那个问题没有提到 is_null。 - Rakib
4个回答

19

is_null($a)$a === null意思相同。

($a === nullis_null($a)快一点,因为可以少调用一个函数,但这并不重要,选择你喜欢的风格即可。)

关于=====的区别,请参阅PHP类型比较表

$a === null仅在 $anull时为真。

但是对于==,以下内容也返回true

null == false
null == 0
null == array()
null == ""

1
请将以下与程序相关的内容从英语翻译成中文。仅返回翻译后的文本:+1,如果能够优雅地编辑它,并提供额外信息 :) - Fluffeh
-1表示优雅地编辑出额外的与问题无关的信息 :) - salathe
@salathe 那么哪部分是无关紧要的呢? :) - xdazz
"only if"? 未设置的值呢? https://dev59.com/fG445IYBdhLWcg3w3N2z#15607428 - Mr. Lance E Sloan

3

1

== 检查 value 是否相等,例如:

>> "123" == 123
<< true

===检查值和类型是否相等,例如:

>> "123" === 123
<< false

所以 is_null=== 是一样的吗? - Rakib
1
不,is_null 检查提供的值是否不是 null,因此:function is_null($value) { return $value === null; } - Diamondo25

1

=== 运算符测试相同的值和相同的类型。空字符串可能会被评估为 null,但它不是 null 类型 - 因此失败。

== 运算符基本上检查它们是否几乎相同 - 也就是说,它们是否评估为相同的值。由于为空,这将评估为 null,因此失败。

is_null 函数进行了相当彻底的检查 - 更像 === 运算符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接