php中变量的判断之isset()和empty()之间的本质区别在哪里?

$str = '';

if($str)

if(isset($str))

if(empty($str))

以上三种写法的区别到底是什么??请详细告知

阅读 5k
9 个回答

isset是当且仅当变量为NULL才会返回false,否则返回true
有三种情况下变量为NULL
1、赋值为NULL
2、未被赋值
3、unset()

empty判断支持多种数据类型
数值型(int,float) 0 返回true,非0返回false
String '' 返回true(这里比较有意思的是'0'同样返回true)
布尔类型 false 返回true
array 没有元素返回true
NULL返回true

如果还不了解,希望可以自己动手,把上面的数据类型都用isset和empty比较一下。
希望对你有帮助!

if($str) $str这个变量是一定要存在的,为空的情况有:null, '', 0, false

isset($str) $str可以不用定义,为空的情况有:null

empty($str) $str也可以不用定义,为空的情况有:null, false, 0, ''

你把变量设置为null就了解了。

这个,看函数名就能理解他们的区别了。

$foo = 0;
$foo = '';
$foo = array();
$foo = NULL;
$foo = false;

上面这些情况都被认为是empty,也就是empty($foo)返回真.
所以说if(empty($foo))if(!isset($foo))是不等价的,倒是跟if($foo)有点像.
个人觉得还是用isset好些,避免被坑.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题