跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

PHP变量检测:isset、empty与is_null判断变量的区别

isset()检测变量是否已声明且不为NULL,empty()判断值是否为PHP“空”(含未定义变量),is_null()严格判定已定义变量值是否为NULL;三者逻辑差异决定适用场景。

如果您在PHP开发中需要判断变量的状态,却对isset、empty与is_null的适用场景感到困惑,则可能是由于三者在变量存在性、空值定义和NULL判定上的逻辑差异未被清晰区分。以下是三种函数的核心区别与具体应用方式:

一、isset():检测变量是否已声明且不为NULL

isset()用于确认变量是否已被设置(即已声明并赋予了非NULL值)。它对未定义变量、被unset()的变量或显式赋值为NULL的变量均返回FALSE,仅当变量存在且值明确不为NULL时才返回TRUE。该函数支持多参数,全部满足条件才返回TRUE。

1、定义一个变量并赋值为NULL:

$var = NULL;

2、调用isset()检测:

var_dump(isset($var)); // 输出 bool(false)立即学习“PHP免费学习笔记(深入)

”;

3、定义一个整数变量:

$num = 0;

4、再次调用isset():

var_dump(isset($num)); // 输出 bool(true)

5、检测未声明变量:

var_dump(isset($undefined)); // 输出 bool(false)

二、empty():检测变量是否“空”(等价于布尔假)

empty()不关心变量是否已定义,而是直接判断其值是否属于PHP认定的“空”范畴。若变量未定义,empty()会将其视为已存在且值为NULL,从而返回TRUE;若变量存在但值为""、0、"0"、FALSE、array()、NULL或仅声明未赋值的变量,同样返回TRUE。

1、声明但未赋值的变量:

$a;

2、使用empty()检测:

var_dump(empty($a)); // 输出 bool(true)

3、赋值为字符串"0":

$b = "0";

4、检测结果:

var_dump(empty($b)); // 输出 bool(true)

5、赋值为浮点数0.0:

$c = 0.0;

6、检测结果:

var_dump(empty($c)); // 输出 bool(true)

三、is_null():严格判定变量值是否为NULL

is_null()仅关注变量的值是否严格等于NULL,不处理未定义变量——传入未定义变量将触发Notice警告并导致致命错误。它要求变量必须已声明,且值必须是NULL类型,其他任何值(包括0、FALSE、"")均返回FALSE。

1、显式赋值为NULL:

$x = NULL;

2、调用is_null():

var_dump(is_null($x)); // 输出 bool(true) PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。

下载

3、赋值为FALSE:

$y = FALSE;

4、检测结果:

var_dump(is_null($y)); // 输出 bool(false)

5、尝试检测未定义变量:

var_dump(is_null($z)); // 触发 Notice: Undefined variable

四、三者行为对比的关键边界情况

当变量值为0、FALSE、""、array()时,empty()统一返回TRUE;而isset()在这些情况下只要变量已定义就返回TRUE;is_null()则仅在值为NULL时返回TRUE。特别注意:isset($var)为FALSE时,$var可能未定义、被unset()或被赋为NULL;而is_null($var)为TRUE时,$var一定已定义且值为NULL。

1、定义变量为0:

$val = 0;

2、分别检测:

var_dump(isset($val), empty($val), is_null($val)); // 输出 bool(true) bool(true) bool(false)

3、定义变量为NULL:

$val = NULL;

4、再次检测:

var_dump(isset($val), empty($val), is_null($val)); // 输出 bool(false) bool(true) bool(true)

5、仅声明未赋值:

$val;

6、检测结果:

var_dump(isset($val), empty($val), is_null($val)); // 输出 bool(false) bool(true) 触发Notice

五、安全检测组合建议

在实际开发中,单独使用任一函数都可能存在误判风险。例如,需确认变量存在、非空且非NULL时,可组合使用isset()与!empty();若需排除未定义变量干扰并精确识别NULL值,则应在is_null()前先用isset()兜底。

1、安全检测已定义且非空:

if (isset($var) && !empty($var)) { /* 安全执行 */ }

2、安全检测是否为NULL:

if (isset($var) && is_null($var)) { /* 确认为NULL */ }

3、检测未定义或为NULL的统一情形:

if (!isset($var)) { /* 包含未定义和NULL两种情况 */ }

4、检测变量存在但值为NULL的精确路径:

if (isset($var) === false || is_null($var)) { /* 显式分离逻辑 */ }

5、避免对未定义变量直接调用is_null():

if (isset($var) && is_null($var)) { /* 先保底再判定 */ }

相关文章