您的位置:首页 > 编程语言 > PHP开发

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

2016-04-01 09:25 846 查看
为方便不想看代码的同学,先总结(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: