简单说说isset和empty的区别?如果你在面试,碰巧面试官问这个问题。可以这样回答:变量值为0、空字符串、空数组等,empty认为是空,isset认为不为空。如果变量不存在,isset和empty都认为该变量为空。推荐使用isset函数,避免使用empty掉坑。如果你想了解它们之间更详细的区别,请继续往下看……一张图完全清楚,一张图是用ProcessOn画的注意:为了方便对比,这里把空函数倒过来了。注意!empty()"",0,"0",FALSE,array()...这个条件不完整,你可以自己测试如果你觉得困惑,请暂时跳过这一部分。这是issetempty对应不同变量的返回结果,两者的区别汇总在这张图中。isset在绿色虚线框内的表现,!empty在黄色虚线框内的表现。可以看出,empty相比isset,需要判断更多的条件来确定返回的结果。如果你不明白某事,或者不能记住所有的细节。让我告诉你如何记住这张照片的一切!考虑矿泉水想象一下,现在桌子上有一瓶矿泉水。瓶子可能有这4种情况:水瓶:瓶子里有水空气瓶:水喝完了,瓶子里只有空气真空瓶:瓶子被抽真空,里面什么都没有,对应4种状态:一般值:一般值放在存储单元中空气值:变量为"",0,"0",FALSE,array()...真空值:变量为NULL变量不存在或不存在定义小学生为空,中学生为isset。假设我们可以使用issetempty函数来判断一个矿泉水瓶是否是空的。会出现这样的结果:如果是空气瓶,那么empty就认为它是空的(看起来确实是空的。!),但是isset却认为它不是空的(里面有空气!)如果是真空bottle,那么emptyisset会认为是空的。如果是水瓶,那么emptyisset会认为它不是空的。可见empty只是不懂科学的小学生,以为瓶子看起来是空的,就是空的!果然还是太小了~而且伊斯特是个学过物理的中学生,明白“真空”的概念——他知道瓶子里还有空气!因此,对于以上三种情况中的第一种,老司机经验丰富,得出了不同于小学生空洞的结论。现在我们可以知道,如果用这两个函数来判断变量,结果会是这样的:如果是空气值("",0,"0",FALSE,array()...),则为空认为是空的,isset认为不是空的。如果是真空值(NULL),那么emptyisset就认为是空的。如果是一般值(除了这两种情况,就是说瓶子里有水),那么emptyisset就是Thinkit'snotempty这是一开始给出的面试答案。现在,是不是很容易理解?isset()函数格式详细比较:boolisset(mixedvar[,mixedvar[,...]])功能:检查变量是否被设置返回值:如果变量不存在,如果变量存在则返回FALSE并且其值为NULL,如果变量存在且值不为NULL,也返回FALSE,返回TURE当同时检查多个变量时,只有每一项满足前面的要求才返回TRUE,否则结果为FALSE更多说明:使用unset()释放变量后,将不再是isset()。PHP函数isset()只能用于变量,传递任何其他参数都会导致解析错误。要检查是否已设置常量,请使用defined()函数。empty()函数格式:boolempty(mixedvar)功能:检查变量是否为空返回值:如果变量不存在,返回TRUE如果变量存在且值为"",0,"0",NULL,FALSE,array(),var$var和不带任何属性的对象,如果变量存在且值不是"",0,"0",NULL,FALSE,array(),var$var和不带属性的对象返回TUREanyattributes,则返回FALSE更多解释:empty()的返回值=!(boolean)var,但不会产生警告信息,因为该变量未定义。有关详细信息,请参阅转换为布尔值。empty()只能用于变量,传递任何其他参数将导致Paser错误并终止操作。要检查是否已设置常量,请使用defined()函数。最全的区别现在我们把矿泉水和变量放在一起,画出最全的区别图:如果你能看懂前面的内容,你就会完全看懂两张图,issetempty的区别也会牢记在心。如果还有人问你这两者的区别,立马扔出这种图~有兴趣的可以往下看,官方手册给的例子...PHP手册这是一个区分空isset的表if($var),从表中我们可以发现isset()的返回值与!is_null()empty()的返回值相同,而!boolean($x)的返回值相同。if($x)其实是先把变量转换成boolean类型,然后再进行条件判断。如果$var不存在,if($x)语句会在PHP中引发E_NOTICE级别的异常,但不是致命错误,脚本仍然可以执行;empty($x)和isset($x)不会报告任何异常。参考PHPisset()和empty()区别的详细解释出处!
