在 PHP 编程中,is_null 和 empty 是两个常用的函数,用于判断变量的状态,但它们的作用和使用场景有明显区别。本文将详细对比这两个函数,帮助你理解它们的差异,并在实际开发中合理使用。
is_null($var)
判断变量是否为 NULL,如果变量的值严格为 NULL,返回 true,否则返回 false。
empty($var)
判断变量是否为空。这里的“空”比较宽泛,除了 NULL,还包括了 false、空字符串 ""、0、"0"、空数组 [] 等情况。如果变量的值被认为是“空”,返回 true,否则返回 false。
对比项 | is_null | empty |
---|---|---|
判断内容 | 只判断是否为 NULL | 判断变量是否为空(NULL、false、0、空字符串、空数组等) |
变量是否声明 | 变量必须已声明,否则会报错或提示未定义变量 | 变量未声明时不会报错,直接返回 true |
适用场景 | 需要严格判断变量是否为 NULL | 判断变量是否“无意义”或“空值” |
结果示例 | is_null(0) 返回 false | empty(0) 返回 true |
<?php
$var1 = null;
$var2 = 0;
$var3 = "";
$var4 = false;
$var5 = [];
var_dump(is_null($var1)); // true
var_dump(empty($var1)); // true
var_dump(is_null($var2)); // false
var_dump(empty($var2)); // true
var_dump(is_null($var3)); // false
var_dump(empty($var3)); // true
var_dump(is_null($var4)); // false
var_dump(empty($var4)); // true
var_dump(is_null($var5)); // false
var_dump(empty($var5)); // true
// 变量未定义的情况
var_dump(empty($undefined_var)); // true
// var_dump(is_null($undefined_var)); // 会报错:未定义变量
?>
未定义变量的处理
使用 empty 检查未定义变量时不会报错,适合在不确定变量是否声明的情况下做“空值”判断。is_null 则要求变量必须已声明,否则会导致错误。
逻辑需求选择
如果需要严格判断变量是否被赋值为 NULL,应使用 is_null。如果判断变量是否“等价于空”,用 empty 更合适。
与 isset 的区别
isset 用来判断变量是否已被设置且不为 NULL,和这两个函数一起配合使用,能更准确控制变量状态。
假设你从一个 API 获取数据,判断数据是否有效时:
<?php
$response = file_get_contents("https://gitbox.net/api/data");
$data = json_decode($response, true);
if (is_null($data['value'])) {
echo "数据为 NULL,需重新请求";
}
if (empty($data['value'])) {
echo "数据为空,可能是 0、空字符串或未设置";
}
?>
以上代码示例中,is_null 用于判断确切的 NULL,而 empty 则涵盖了更广泛的“无效”或“空”情况。