让我们先有一些基础知识:
- isset($x) 语言结构。检查变量是否赋值
- empty($x) 函数。检查值是否为空
- is_null($x) 函数。检查值是否为null
- == 运算符。判断值是否相等
- === 运算符。判断值和类型是否相等
只有 isset() 是必须传入变量的,其他均可传入变量、常量或字面量。
让我们先看一张取值表:
常用判空表达式参照表.png得到以下结论:
-
unset
与null
看起来是等价的,其他任何值都是set
的。 -
empty($x)
等价于$x == null
-
is_null($x)
等价于$x === null
-
false
、0
、""
、[]
在布尔运算时都被看做 false -
\0
在布尔运算时竟然被看做 true
那 is_null() 与 === null 有什么区别呢?
- 后者更快。运算符操作比函数操作开销小,虽然在PHP源码中它们做的事情是类似的。
- 事实上前者判断的是:值是否属于 null 类型;后者判断的是:值是否等于 null 且属于 null 类型。当然我们不能忽略一个事实,null 类型只有 null 值。
网友评论