综合归纳:PHP中empty()、is_null()和isset()的区别

为方便不想看代码的同学,先总结(php.net上有现成的):

1、先看empty():
当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
以下的东西被认为是空的:
"" (空字符串)
0 (作为整数的0)
0.0 (作为浮点数的0)
"0" (作为字符串的0)
NULL
FALSE
array() (一个空数组)
$var; (一个声明了,但是没有值的变量)

2、isset和is_null一样,只在值不存在、值为null时认为满足条件,但是有个区别:isset 是字面量,is_null是函数,在值没有初使化和不存在时,is_null会有Notice提醒,如果这点不清楚,可以参考laruence的博客http://www.laruence.com/2009/12/09/1180.html


对于不存在的值,注意:empty返回的也会是true

var_dump(isset($a_noexist));//bool(false)
var_dump(empty($a_noexist));//bool(true)
var_dump(is_null($a_noexist));//bool(true)  Notice: Undefined variable: a_noexist

对于""值,因为""也是值,所以不难理解结果

$a="";
var_dump(isset($a));//bool(true)
var_dump(empty($a));//bool(true)
var_dump(is_null($a));//bool(false)

对于NULL值

$a=NULL;
var_dump(isset($a));//bool(false)
var_dump(empty($a));//bool(true)
var_dump(is_null($a));//bool(true)

对于数字0及字符串"0"结果一样

$a=0;//用$a="0"一样
var_dump(isset($a));//bool(true)
var_dump(empty($a));//bool(true)
var_dump(is_null($a));//bool(false)

对于TRUE/FALSE,true好理解,我们看false,其实false和数值0一样

$a=FALSE;
var_dump(isset($a));//bool(true)
var_dump(empty($a));//bool(true)
var_dump(is_null($a));//bool(false)

另外一个容易掉的坑:http://www.laruence.com/2011/12/19/2409.html
在php5.4具体的改变是, 如果变量$a是一个字符串, 那么, 对于非数字型索引, 比如$a["foo"], 在isset的时候将返回false, empty返回true,
但是为了兼容已有的代码, 当你获取这个值的时候, 还是会返回$a[0], 不过会额外抛出一个警告信息. 比如:
<?php
$a = "laruence";
var_dump($a["foo"]) ; //PHP Warning:  Illegal string offset 'foo'
//output string(1) "l"
     
var_dump(isset($a["foo"]));
//false
     
var_dump(empty($a["foo"]));
//true


而对于键值是bool, double, null的情况, 将会和以前保持一致, 不过会抛出一个Notice信息.
<?php
$a = "bar";
echo $a[TRUE];  //PHP Notice:  String offset cast occured
//output a



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值