empty和isset ,is_null的区别

本文详细介绍了PHP中empty、isset及is_null等函数的区别与用法,通过实例对比展示了如何判断变量的状态,包括变量是否为空、是否存在及是否为NULL。

1、empty

判断一个变量是否为空

null、false、00、0、’0′、』。都会返回true。

2、isset

判断一个变量是否设置

0、00、’0′、』、’ ‘、false、’false’、’null’都返回true。 
只有值為null的变量返回true

3、if 判断式

0、00、0.0、’0′、』、false、null返回false 
‘00′、’0.0′、’null’、’false’、’ ‘返回true

isset判断变量是否已存在(配置)

unset把变量删除(释放)掉

empty 判断变量是否为空

is_null 判断变量是否为NULL

is_null,我们可以把它看成是!isset,是isset的一个逆操作,下面一张表可以很清楚的说明他们之间的关系:

变量emptyis_nullisset
$a=”“truefalsetrue
$a=nulltruetruefalse
var $atruetruefalse
$a=array()truefalsetrue
$a=falsetruefalsetrue
$a=15falsefalsetrue
$a=1falsefalsetrue
$a=0truefalsetrue
$a=”0”truefalsetrue
$a=”true”falsefalsetrue
$a=”false”falsefalsetrue

不难看出只要变量是否为” “或者0,或者是false和null,只要是这些值empty都会返回true,而isset是判断变量是否存在,只要你这个变量不是null或未赋值,返回结果都是true而is_null正好是isset的反结果

当然如果只是想做如下工作: 
echo !isset($_GET['a']); //如果得不到变量a的值 
echo empty($_GET['a']); //如果变量a的值是空

<think>好的,我现在需要回答用户关于PHPis_nullisset函数的区别的问题。用户之前已经询问过PHP的变量检测函数,现在进一步深入,想了解这两个特定函数的不同之处。我需要结合用户提供的引用内容,以及之前自己回答的知识,来整理出一个清晰准确的解释。 首先,回顾用户提供的引用内容: 引用[1]、[3]、[4]、[5]都提到了is_nullisset区别。其中,引用[1]提到is_null检查变量是否为nullisset则是检查变量是否已设置且不为null。引用[3]指出isset检查变量是否已设置且不是null,而is_null严格检查是否为null。引用[5]提到isset在变量被unset后返回false,如果变量被设为nullisset也会返回false。这些引用都强调了issetis_null在处理变量存在性null值时的不同表现。 在之前的回答中,我详细介绍了is_null函数,提到它用于检测变量是否为NULL,并且区分未定义变量赋值为NULL的情况。同时,在isset部分,我可能没有详细展开,但现在需要结合用户的问题重点对比这两者。 接下来,我需要明确两者的核心区别: 1. **定义与用途**: - isset:检查变量是否已声明且不为null。变量存在且不是null时返回true。 - is_null:检查变量是否为null。只有当变量存在且值为null时返回true;如果变量未定义,会报错。 2. **未定义变量的处理**: - isset不会报错,若变量未定义或值为null,返回false。 - is_null如果变量未定义,会抛出警告(E_NOTICE),然后返回true,因为变量不存在被视为null。 3. **返回值对比**: - 当变量存在且为null时,isset返回false,is_null返回true。 - 当变量存在且非null时,isset返回true,is_null返回false。 - 当变量未定义时,isset返回false,is_null触发警告并返回true。 需要举例说明这些情况,帮助用户理解不同情况下的返回值。例如,变量被显式赋值为null、变量未声明、变量被unset后的情况。 另外,引用中提到isset测试被设置成null的变量返回false,而is_null则会返回true,这与PHP的变量状态有关。同时,用户可能在实际使用中遇到isset用于检查变量是否存在,而is_null用于明确检测null值的情况,需要注意安全性错误处理,比如在使用is_null前先用isset避免未定义变量的错误。 还要注意性能方面的考虑,isset是语言结构,执行速度比is_null函数快,尤其在频繁检查时可能影响性能。 最后,总结使用场景:isset用于变量是否存在或非null的检查,is_null用于严格判断变量是否为null,但需确保变量已定义。在代码中,通常建议先使用isset来避免未定义变量错误,再进一步检查值是否为null,或者使用=== null进行比较,因为这样更高效且安全。</think>### PHP中`is_null()`与`isset()`的核心区别解析 `is_null()``isset()`是PHP中用于变量检测的两个关键函数,但它们的用途、行为及返回值存在本质差异。以下是两者的详细对比: --- #### 一、定义与核心逻辑 | **函数** | **检测目标** | **返回值逻辑** | |----------------|-----------------------------------------------------------------------------|-------------------------------------------------------------------------------| | **`isset()`** | 检查变量是否已声明且值**非`NULL`**(包括变量是否被定义或已被`unset()`释放) | 变量存在且值不为`NULL`时返回`true`,否则返回`false` | | **`is_null()`**| 严格检查变量是否为`NULL`(需变量已声明) | 变量存在且值为`NULL`时返回`true`,若变量未定义会触发警告(`E_NOTICE`)并返回`true` | --- #### 二、具体场景对比 通过代码示例理解不同情况下的行为差异: ##### 1. **变量已声明且赋值为`NULL`** ```php $var = null; var_dump(isset($var)); // false(变量存在但值为NULL) var_dump(is_null($var)); // true ``` ##### 2. **变量未声明** ```php var_dump(isset($undefinedVar)); // false(变量未声明) var_dump(is_null($undefinedVar)); // 触发警告(Undefined variable)并返回true ``` ##### 3. **变量被`unset()`释放** ```php $var = 42; unset($var); var_dump(isset($var)); // false(变量已被释放) var_dump(is_null($var)); // 触发警告并返回true(变量不存在等同于NULL) ``` ##### 4. **变量存在且非`NULL`** ```php $var = "hello"; var_dump(isset($var)); // true var_dump(is_null($var)); // false ``` --- #### 三、核心区别总结 | **特性** | `isset()` | `is_null()` | |-------------------|-----------------------------------------------|-----------------------------------------------| | **变量未定义时** | 静默返回`false` | 触发`E_NOTICE`警告后返回`true` | | **性能** | 语言构造(底层实现更快)[^1] | 普通函数(稍慢) | | **常见用途** | 检查变量是否存在或非空 | 严格判断变量是否为`NULL` | | **安全性** | 避免未定义变量错误 | 需配合`isset()`先验证变量存在性 | --- #### 四、使用建议 1. **优先使用`isset()`进行存在性检查** 避免因未定义变量导致脚本中断: ```php // 安全做法 if (isset($_GET['user_id']) && is_numeric($_GET['user_id'])) { // 处理用户输入 } ``` 2. **需要严格判断`NULL`时,使用`=== null`替代`is_null()`** 更高效且避免未定义变量警告: ```php $var = null; if ($var === null) { // 直接类型值比较 // 处理NULL逻辑 } ``` 3. **组合使用`isset()``is_null()`** 当需要明确区分“未定义”“显式赋值为`NULL`”: ```php if (!isset($var)) { echo '变量未定义或被unset()'; } elseif (is_null($var)) { echo '变量已定义且值为NULL'; } ``` --- ### 相关问题 1. **为什么`isset()`对未定义变量不报错而`is_null()`会报错?** 2. **如何避免PHP中的未定义变量警告?** 3. **`empty()`函数与`isset()`、`is_null()`有何区别?** 4. **使用`=== null``is_null()`哪个性能更好?** [^1]: PHP官方文档指出`isset()`是语言构造而非函数,执行效率更高。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值