这里讨论的php的判空函数包括以下五种:
!
empty()
isset()
unset()
is_null()
一般来说:
【
empty()范围最大,包括0,“0”,FALSE, NULL,未定义、未赋值都返回true。
var==null:与empty()基本相同,但:变量未初始化时将会报错
isset()范围其次,NULL, 未定义,未初始化,返回false。
is_null(var === null)范围最小,仅仅判断是否为NULL。变量未初始化报错。
】
要注意在php中的四个级别:
【
未定义——对于弱类型语言,未定义与未初始化其实是一个意思
level1: 未初始化,即未赋值 ———var==null可以判断2,3,但是level1会报错
level2: NULL值 ———isset可以判断level1,2
———is_null只能判断level2
level3: “”, 0,“0”,FALSE ——empty可以判断level1,2,3
】
同时要注意:
【
0,“”,FALSE,“0”
特别是在字符串操作中,0与“”是等价的,都是空字符,
0==“”,也是对的,因为两者都会判断为FALSE
查看PHP的手册,其实主要是由于FALSE的定义:
empty()可以判断1.未初始化 2.FALSE
isset()只能判断 1.未初始化 2.NULL(“FALSE中的一种”)
!$var 只能判断 1. FALSE 但是不能判断初始化
FALSE的范围包括NULL,0,“”,“0”,0.0,$var, array()
!($abc) 与empty($abc)的不同现在也知道了:不能判断未初始化,会报错!
参考php手册:在自动类型转换中
当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE 本身
整型值 0(零)
浮点型值 0.0(零)
不包括任何元素的数组
不包括任何成员变量的对象(仅 PHP 4.0 适用)
特殊类型 NULL(包括尚未赋值的变量)
从空标记生成的 SimpleXML 对象
所有其它值都被认为是 TRUE(包括任何资源)。
】
这些个的区别:
【
1.与 php 错误检查级别设置有关
只在屏蔽掉 E_NOTICE 级别检查时,才不会报 Notice 警告
a)程序中 error_reporting(E_ALL ^ E_NOTICE);
b)php.ini 中 error_reporting=E_ALL ^ E_NOTICE
至少要有一个
2.与php的版本有关系
高级版本的限制更严格
】
如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
isset
如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。
is_null
检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】