综合归纳: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
另外一个容易掉的坑:http://www.laruence.com/2011/12/19/2409.html
在php5.4具体的改变是, 如果变量$a是一个字符串, 那么, 对于非数字型索引, 比如$a["foo"], 在isset的时候将返回false, empty返回true,
但是为了兼容已有的代码, 当你获取这个值的时候, 还是会返回$a[0], 不过会额外抛出一个警告信息. 比如:
而对于键值是bool, double, null的情况, 将会和以前保持一致, 不过会抛出一个Notice信息.
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
相关文章推荐
- phpexcel的使用
- PHP SOAP 客户端POST XML详细代码
- PHP数组编码转换
- 每天laravel-20160624|RateLimiter
- 每天laravel-20160624|RateLimiter
- PHP基础整理4
- PHP基础整理3
- 每天laravel-20160623|NullStore
- 每天laravel-20160623|NullStore
- 每天laravel-20160622|MeacachedStore
- 每天laravel-20160622|MeacachedStore
- 关于ftp访问windows系统问题
- laravel眼瞎么?
- laravel遇到的问题
- php常用的字符串格式化函数
- ftp配置
- 二、php语法、注释、变量、数据类型
- PHP数学运算函数大汇总(经典值得收藏)
- PHP数学运算与数据处理实例分析
- Zend Studio使用技巧两则