在项目中经常会看到在判断中用is_set(),is_null(),empty()作为判断校验条件的,但是你知道在什么情况下用哪一种最合适吗?今天来做一下归纳总结!
首先不管三七二十一,翻一翻官方手册才是王道 ‘u’ 。
isset
bool isset ( mixed $var [, mixed $... ] )
检测变量是否已设置并且非 NULL
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量
。
如果一次传入多个参数,那么 isset() 只有在全部参数都以被设置时返回 TRUE 计算过程从左至右,中途遇到没有设置的变量时就会立即停止。
这里顺便说明一下标红处的意思:
NULL 字节是变量为空 $var = ''
; 变量有值,不过是空,isset()是TRUE
NULL 常量是$var=NULL
; 变量没有值,没有分配存储空间,isset()是FALSE
Warning isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用 defined() 函数。 |
empty
bool empty ( mixed $var )
检查一个变量是否为空
判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。
Note: |
在 PHP 5.5 之前,empty() 仅支持变量;任何其他东西将会导致一个解析错误。换言之,下列代码不会生效: empty(trim($name))。 作为替代,应该使用`trim($name) == false`. 没有警告会产生,哪怕变量并不存在。 这意味着 empty() 本质上与 `!isset($var) || $var == false` 等价。 |
以下的东西被认为是空的:
"" (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
"0" (作为字符串的0)
NULL
FALSE
array() (一个空数组)
$var; (一个声明了,但是没有值的变量)
这里可以看一下转换为布尔类型相关知识
is_null
bool is_null ( mixed $var )
检测变量是否为 NULL
如果 var 是 null 则返回 TRUE,否则返回 FALSE。
在下列情况下一个变量被认为是 NULL:
- 被赋值为 NULL。
- 尚未被赋值。
- 被 unset()。
NULL 类型只有一个值,就是不区分大小写的常量 NULL。
总结
变量$var | isset($var) | empty($var) | is_null($var) |
---|---|---|---|
666 | 1 | 0 | 0 |
‘’ | 1 | 1 | 0 |
array() | 1 | 1 | 0 |
0 | 1 | 1 | 0 |
‘0’ | 1 | 1 | 0 |
false | 1 | 1 | 0 |
null | 0 | 1 | 1 |
undefined | 0 | 1 | 1(with a undefined notice) |