在php中经常会用isset()、is_null()和empty()三个函数来做if判断,那这三个函数到底有什么不同呢?
下面通过官方文档对这三个函数的解释来说说他们的区别(PHP版本:7.3.4nts)
一、isset()函数
函数形式:
isset ( mixed $var [, mixed $... ] ) : bool
函数说明:
检测变量是否设置,并且不是 NULL。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。
如果一次传入多个参数,那么 isset() 只有在全部参数都以被设置时返回 TRUE 计算过程从左至右,中途遇到没有设置的变量时就会立即停止。
返回值:
如果 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。
从它的函数使用形式来看,它可以同时对多个变量进行检查,至于结果,请看案例:
在正常情况下,使用未定义的变量是会报错的,但这里并没有报错。
单个变量检查应该没什么疑问,但是同时检测多个变量时,从案例可以发现,只有当检测的所有变量都存在且不为NULL时才会返回TRUE,否则返回FALSE。
二、is_null() 函数
函数形式:
is_null ( mixed $var ) : bool
函数说明:
is_null — 检测变量是否为 NULL。
如果 var 是 null 则返回 TRUE,否则返回 FALSE。
查看 NULL 类型获知变量什么时候被认为是 NULL,而什么时候不是。
从函数使用形式上来看,is_null() 一次只能检测一个变量,请看示例截图:
从示例结果来看,is_null() 检测未定义的变量也不报错,并且返回TRUE,当变量已定义并且值不为空时,返回 false,与isset() 正好相反。
当变量定义了,但没有明确指定变量的值为NULL时,此时即便变量没有值,但任然返回了false
三、empty() 函数
函数形式:
empty ( mixed $var ) : bool
函数说明:
判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。这意味着 empty() 本质上与 !isset($var) || $var == false 等价。
返回值:
当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
以下的东西被认为是空的:
"" (空字符串) 0 (作为整数的0) 0.0 (作为浮点数的0) "0" (作为字符串的0) NULL FALSE array() (一个空数组) $var; (一个声明了,但是没有值的变量)
empty()函数检测的同样是一个变量,使用示例:
从截图中可以发现,当变量为空字符串时,is_null 返回的是 false,empty() 返回的是 true。
【对比总结】
①对于检测不存在的变量,三个函数都不会产生警告和其他错误。
②isset()可以同时检测多个变量,检测的变量之间为‘并’关系:只有所有变量都存在且值不为 NULL,返回值才会TRUE。
③is_null(),检测空字符串时返回TRUE。
④empty() 当被判断变量存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE。
⑤isset()检测单个变量,只在变量未被定义或者指定变量的值为NULL两种情况下返回FALSE。