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

来源:互联网 发布:维吉尼亚算法 编辑:程序博客网 时间:2024/05/16 15:10

为方便不想看代码的同学,先总结(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
原创粉丝点击