php判空函数对比

2014-01-22 23:21:42

这里讨论的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

所有其它值都被认为是 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 【未定义变量传入后会出错!】