今天说说php里面几个容易混淆的函数:empty()isset()is_null()

empty

看一下官方文档里面的定义

当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.

以下的东西被认为是空的:

  • "" (空字符串)
  • 0 (作为整数的0)
  • 0.0 (作为浮点数的0)
  • "0" (作为字符串的0)
  • NULL
  • FALSE
  • array() (一个空数组)
  • $var; (一个声明了,但是没有值的变量)

看一下代码运行的结果,是否符合预期

	$a = NULL;
	var_dump(empty($a));
	
	$a = '';
	var_dump(empty($a));
	
	$a = [];
	var_dump(empty($a));
	
	$a = 0;
	var_dump(empty($a));
	
	$a = 0.0;
	var_dump(empty($a));
	
	$a = "0";
	var_dump(empty($a));
	
	$a = FALSE;
	var_dump(empty($a));
	
	$b;
	var_dump(empty($b));

结果是

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

isset

检查变量是否已设置并且非NULL

	$a;
	var_dump(isset($a));
	
	$a = NULL;
	var_dump(isset($a));
	
	$a = [];
	var_dump(isset($a));
	var_dump(isset($a['k1']));

	unset($a);
	var_dump(isset($a));

结果是

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

null值 与 NULL

这里不区分大小写。将变量赋值为null,不会删除该变量或者unset其值,只是返回NULL值而已

以下三种情况被认为是NULL:

  • 被赋值为NULL
  • 只声明未赋值
  • 被unset了

is_null可以判断是否是NULL值

	$a;
	var_dump(is_null($a));
	
	$a = NULL;
	var_dump(is_null($a));
	
	$a = null;
	var_dump(is_null($a));
	
	$a = '0';
	var_dump(is_null($a));

	unset($a);
	var_dump(is_null($a));

结果是

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