- 相信大家都对下面的代码不陌生:
$user = session('USER');
if($user != ''){
echo $user;
}
if($user['userName'] != ''){
echo $user['userName'];
}
- 以上就是大家一般平时对非空判断的代码
那么问题来了:这种代码其实就是个bug,为什么这么说呢?
- 第一:上述代码的非空判断不会识别一类数据处理中的特殊类型(其实是空的,但是会被识别为非空),如下:
array(
empty(灰色)
)这个数组是没有值的,但是这个数组是存在的,那么你的上述代码就是个bug了,而且会让你很难找到这处bug,会让你很头疼;怎么解决,如下:
将上述代码中的非空判断换成empty();去精确判断,避开PHP基层逻辑代码导致的无数据有对象给程序逻辑带来的问题。
- 第二:上述代码中存在
$user['userName'] != ''
的非空判断,这其实也是个bug,原因如下:
在数组中,会存在一种情况:叫做键值不存在,导致的数组越界(数组越界状况种类,请查找我的历史文章)。
那么当符合这个情景的时候,你的代码就是会报数组越界错误了,怎么解决,如下:
将上述代码中的非空判断改为isset();去处理判断,可以预防不存在的数组键和值用作条件判断时导致的程序错误。
注:empty只能用于判断变量,不能用于判断方法的返回值.
本文为作者原创文章,转载请注明出处leeboot浅谈程序中的非空与null判断
网友评论