php isset函数对比empty函数之间的区别及其使用方法
来源:互联网 发布:推广软件拦截 编辑:程序博客网 时间:2024/04/30 07:08
php中empty函数和isset函数经常会用到,而且两者出现的频率不低,两个有相似的地方,但实质上有很大的区别,严格区分两者非常重要。
empty函数用来检测变量是否为空,而isset函数用来检测函数是否设置且是不是为null,这是两者重要的区别,可能光说还不能很好的理解,下面来看例子。
首先来看isset函数
isset的官方解释:determine if a variable is set and is not null //判断一个变量是否被设置同时变量不为null
bool isset(mixed $var,[ ,mixed $... ] );
范例:
<?php$str1;$str2="";$str3="hello";var_dump(isset($str0));var_dump(isset($str1));var_dump(isset($str2));var_dump(isset($str3));得到的结果是 false false true true
来分析一下:
isset官方手册写的: bool isset(mixed $val [,mixed $var...]);
第一个$str0没有设置,isset检测的结果没有设置返回false,这个一般都没有疑问。
第二个$str1设置了,但是没有赋值,这种情况$str1为null,虽然isset检测结果是设置了该变量,但是由于值为null,因此也为false,这里是容易出错的地方,因为很多人认为isset只检测变量是否设置了,既然设置了,肯定就为true,这是错误的,即便变量设置了,如果为null的话也是为false的。
第三个检测结果是存在,而变量$str2为空值,因此isset结果是true,第四个同理,因此也是true。
可以看出isset检测的是变量是否存在,且是不是为null,如果没有设置或者值为null则为false,不是则为true。
isset可以进行多个变量的检测
如果是多个变量的检测,那么必须所有的变量都存在且不为null的时候才能为true,否则为false
例如上面的的例子的$str1和$st2一起使用isset检测,则为false,而$str2和$str3则为true。
unset过的变量,isset为false。
下面来看看empty函数
官方手册的解释:determine whether a variable is empty //判断一个变量是不是为空值
bool empty(mixed $val)
范例:
<?php$str1=null;$str2='';$str3=0;$str4=false;$str5='abc';var_dump(empty($str0));var_dump(empty($str1));var_dump(empty($str2));var_dump(empty($str3));var_dump(empty($str4));var_dump(empty($str5));
得到的结果会是:true true true true true false
这里可能很容易产生误解,因为上面除了最后的$str5的变量为字符串'abc'外,其他都显示为true,也就是empty判断其为空,下面来看看官方对empty的详细描述:
determine whether a variable is considered to be empty,A variable is considered if it does not exist or if it's value equals FALSE.
empty does not generate a warning if the variable does not exist.
上面说的很明白,empty检测变量是值是否为空,如果不存在或者值为false则empty返回true,并且如果变量不存在,empty函数不会产生警告
从上面的解释就能看出上面的范例为什么结果是这样
$str0不存在,empty函数不会产生错误,变量值为空,所以返回true,
$str1存在,但值为null,因此被强制转换为bool值false,同上面的解释,如果值为false则为true,
$str2存在,但值为空,转换bool类型为false,返回true,
$str3存在,但值为0,0被转换成bool类型,为false,同上面的解释,如果值为false则为true,
$str4存在,但值为false,因此得到true,
$str5存在,值为字符串abc,不符合值为空或者值为false,因此empty函数返回false。
从这里可以观察到,其实empty函数会对检测的变量进行判断,判断的过程中会对变量的值进行检测,如果是bool值,根据bool值判断,如果不是bool值则进行强制转换为bool值再进一步进行判断。因此如果该变量的值转换成bool值时为false,则empty函数返回true,如果该变量的值转换成true,empty函数返回false。
详细解读如下:
如果变量不存在,empty函数将该变量强制转换bool类型,转换成false,empty函数返回true。
如果变量存在,但为null、0,、false、array()等强制转换bool类型过程中会得到false的变量,empty函数返回true。
如果变量存在,变量的值转换bool类型为true,则empty函数返回false。
这样来解读empty函数就清晰多了。
isset和empty对比
从上面的解读可以看出,isset()为false的情况,empty()得到的肯定为true。
isset适合于检测一个变量是否被设置了且是不是被初始化,如果变量没有被设置,或者设置了没有进行初始化则返回false,否则返回true。
而empty则适合检测一个变量是否进行了赋值且是不是初始默认值,如果该变量不存在或者该值是初始化的默认值,则认为该变量为空,返回true,否则返回false。由于php是不指定变量类型的,所以empty的使用尤其要小心,它可能由于使用方法不对,得到我们不想要的结果。
例如你想知道一个字符串类型的变量是不是存在,且是不是空值,如果该变量有赋值,但赋值的内容就是字符串的0的话,用empty是得不到想要的答案的,因为empty会自动认为字符串0是int类型的初始化值的默认值0,这个结论是错误的,这种情况应该使用isset进行判断该变量是否设置了,且是不是初始化,然后再判断该变量是不是字符串的初始化默认值' ',这样才能得到正确的结果。
- php isset函数对比empty函数之间的区别及其使用方法
- PHP函数isset和empty的区别
- php中empty函数与isset函数的用法区别
- php中empty(), is_null(), isset()函数区别
- php中empty(), is_null(), isset()函数区别
- php函数isset()和empty()区别
- php函数isset和empty的区别 - 小猪版
- PHP 变量函数 empty()、is_null()、isset()、(bool) 的区别
- 实例研究PHP函数isset和empty的区别
- php中函数 isset(), empty(), is_null() 的区别
- php中empty()和isset()函数的区别
- PHP中isset()与empty()函数的区别
- php中函数 isset(), empty(), is_null() 的区别
- php is_null,isset,empty函数的区分
- isset()和empty()函数的区别
- isset()和empty()函数的区别
- 谈函数isset()和empty()的区别
- php函数之isset() 与empty()函数区别
- [leetcode]7. Reverse Integer
- 高性能MySQL之--聚簇索引
- poj_2635 The Embarrassed Cryptographer(高精度求模)
- Datastage 从资料库抽取监控数据
- iOS压缩 解压文件那些事
- php isset函数对比empty函数之间的区别及其使用方法
- Hadoop学习体系
- 剑指Offer——毕业生求职网站汇总(干货)
- Servlet笔记
- PMP--项目整合管理(二)
- 几步教你怎么写MVP
- Spring Boot 菜鸟教程 11 html页面解析-jsoup
- 设置网页标题图片
- NuttX的学习笔记 8