php的empty,isset,is_null与!

来说说php的empty,isset,is_null 与!,这几个都是if语句中比较常见的判断逻辑。但是有时候用的很纠结,甚至看别人写的程序里面也很纠结。特地梳理梳理,避免踩坑

先来定义一些东西

<?php
$a;
$b=0;
$c=array();
$d='';
$e=null;

empty,用了会上瘾

这是一个用了会上瘾的语言结构!

多好,empty可接受的参数是一个变量,任意类型,哪怕是变量不存在,只要变量被boolean转换之后是false(参考:php的boolean都有哪些),那么empty返回的就是false,并且不会出现警告!等价于 !isset($var) || $var == false

不过注意的是,empty里面不能使用表达式(在php<=5.4),也就是说 empty(trim($name))这个会导致解析错误,不过在php>=5.5这个是有效的!

执行下面代码

var_dump( empty($a) );
var_dump( empty($b) );
var_dump( empty($c) );
var_dump( empty($d) );
var_dump( empty($e) );

结果

bool(true)
bool(true)
bool(true)
bool(true)
bool(true)

isset,只需要确定变量是不是存在

通常,为了避免警告产生,一般用到isset,通常在不关心其值的时候用,但是这里有一个坑,请看下面代码

var_dump( isset($a) );
var_dump( isset($b) );
var_dump( isset($c) );
var_dump( isset($d) );
var_dump( isset($e) );
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)

看到没,看到没!null居然也被isset判断为false,这个,我思维一下子转不过来了……我还是少用为妙,我set这个为null,它反而说我没有set它,太放肆了!

is_null,感觉更坑

这个就是用来判断null值的,变量为null,返回true,看代码

var_dump( is_null($a) );
var_dump( is_null($b) );
var_dump( is_null($c) );
var_dump( is_null($d) );
var_dump( is_null($e) );

结果

 

Notice: Undefined variable: a in C:\Users\huchao\Desktop\test.php on line 21
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)

哎,泪流满面啊,变量没有设定是null,但也会警告,null也是null,其他的都不是null,算了,这个好像还是不用比较好。

 

!,通常我们确定该值存在

!当且仅当确定值存在的时候采用,不然那一堆的警告,作为一个轻度强迫症是不会原谅自己的。不过当我看到很多代码中对那些未定义的变量使用!的时候,我也是醉了…

最后,我还是习惯了使用empty……原来我都是用isset组合==的,哎…

附录

关于使用empty,其中会隐藏一些问题。

未完…

赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注