判断变量是否不为空,函数isset()、!empty()与!is_null()的比较
来源:互联网 发布:手机淘宝5.8.0 编辑:程序博客网 时间:2024/05/20 07:58
判断变量的值,尤其是判断他们是否不为空,我们有以下4种方法:
- if(isset($test)) true:变量已被赋值/设置
- if(!empty($test)) true:变量不为空
- if(!is_null($test)) true:变量不为空
- if($test) true:以自身为参数,变量不为空
(为方便讨论,empty与is_null均取反值,使4个函数都为true时,变量不为空)
四个函数的区别,先说结论0,例子具体分析看第1部分。
0.总结isset(), !empty(), !is_null(),以自身为参数的区别
- isset()、!empty()会首先检查变量是否存在(存在返回true),然后再对变量值进行检测;
is_null()、以自身为参数,直接检查变量值是否为null,如果变量未定义会出现错误警告。 - isset()、!empty()的输入参数必须是一个变量($变量),因为它们是语言结构,不是函数,无法被变量函数调用(参考阅读:可变函数);
is_null()、以自身为参数,输入参数只要是能够有返回值的就可以(常量、变量、表达式等都可以); - 判断为空的时刻:
- isset():仅当 未定义 或者 值为null 时,返回false;
- !empty():未定义、 NULL、 “”(空字符)、0、“0”、FALSE、array(),均返回false;
- !is_null():直接判断是否不为null,只有为null才返回false;未定义会出现错误警告;
- 以自身为参数:未定义、 NULL、 “”(空字符)、0、“0”、FALSE、array(),均返回false;变量未定义时出现错误警告;
1.例子具体分析
4个函数对输入值为:数值(正常)、“”(空字符串)、array()(空数组)、0、“0”、false、null、值未定义,8种情况分别进行检验。
测试代码如下:
<?php $test=array("数值"=>100,"空字符串\"\""=>"","空数组array()"=>array(),"数值0"=>0,"字符\"0\""=>"0","false"=>false,"null"=>null); $i=1; /*将前七种情况放在数组里(最后一种是变量未定义),方便后面foreach循环测试*/ foreach( $test as $key=>$value){ echo 'try:$test',$i,'=',$key,'<br/>'; echo 'isset',isset($value)?' 1 define':' 0 undefine','<br/>'; echo '!empty',!empty($value)?' 1 no empty':' 0 empty','<br/>'; echo '!is_null',!is_null($value)?' 1 no null':' 0 null','<br/>'; echo '以自身为参数',$value?' 1 no null':' 0 null','<br/>'; echo '<br/>'; ++$i; } /*4个函数对前七种情况通过foreach循环进行测试输出,返回1为true,0为false。*/ $key="值未定义"; unset($value);//使用unset()销毁指定的变量$value; echo 'try:$test',$i,'=',$key,'<br/>'; echo 'isset',isset($value)?' 1 define':' 0 undefine','<br/>'; echo '!empty',!empty($value)?' 1 no empty':' 0 empty','<br/>'; echo '!is_null',!is_null($value)?' 1 no null':' 0 null','<br/>'; echo '以自身为参数',$value?' 1 no null':' 0 null','<br/>'; echo '<br/>'; /*对最后一种情况:变量未定义进行测试*/?>
测试结果如下:
try:$test1=数值
isset 1 define
!empty 1 no empty
!is_null 1 no null
以自身为参数 1 no nulltry:$test2=空字符串””
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 nulltry:$test3=空数组array()
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 nulltry:$test4=数值0
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 nulltry:$test5=字符”0”
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 nulltry:$test6=false
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 nulltry:$test7=null
isset 0 undefine
!empty 0 empty
!is_null 0 null
以自身为参数 0 nulltry:$test8=值未定义
isset 0 undefine
!empty 0 empty
!is_null
Notice: Undefined variable: value in D:\xampp\htdocs\test\0105vs_isset_empty_is_null.php on line 22
0 null
以自身为参数
Notice: Undefined variable: value in D:\xampp\htdocs\test\0105vs_isset_empty_is_null.php on line 23
0 null
函数的true/false可用下表进行归纳(”1”表true,”0”表false):
从上表可知:
- 对于值为null和未定义的变量,四种方式都能返回false
- 其中,!is_null()和“以自身为参数”对于未定义的变量还会出现Notice直接报错;
- !empty()和“以自身为参数” 还会对“”、array()、0、“0”、false,均返回false;
- 而isset()和!is_null()只对null和未定义变量做出false判断;
isset()、!empty()的输入参数必须是一个变量
$test=100; echo isset($test),'<br/>'; echo !empty($test),'<br/>'; echo !is_null($test),!is_null(100),!is_null($test=100),'<br/>';
只有!is_null(),可以直接写!is_null(100),!is_null($b=100);
而isset()和!empty()这样写会报错,输入参数只能写入一个变量($变量)
- 因为isset()和!empty()是语言结构,is_null()是一个函数;
喜欢就顶一下吧~Dandelion_Miss
相关阅读:
- 程默:php empty,isset,is_null比较(差异与异同)
- php-note.com:PHP判断变量是否存在及函数isset() 、empty()与is_null的区别
- PHP手册:array_key_exists
- 判断变量是否不为空,函数isset()、!empty()与!is_null()的比较
- PHP判断变量是否存在及函数isset() 、empty()与is_null的区别
- PHP判断变量是否存在及函数isset() 、empty()与is_null的区别
- PHP判断变量是否存在及函数isset() 、empty()与is_null的区别
- PHP判断变量是否存在及函数isset() 、empty()与is_null的区别
- php中的 三个判断变量的函数 empty is_null, isset
- JS中如何判断变量是否为空,有和PHP一样的isset()和empty()函数么?
- [转]PHP中判断空变量empty(),is_null(),isset()的区别
- PHP 变量函数 empty()、is_null()、isset()、(bool) 的区别
- php中empty() isset() is_null()函数比较
- php is_null,isset,empty函数的区分
- isset() 、empty()与is_null的区别
- PHP 判断变量是否为空 empty() 函数
- php empty,isset,is_null比较
- php中empty()、isset()、is_null()和变量本身的布尔判断区别
- php中的isset(),empty(),is_null()函数比较总结
- PHP 变量函数empty()、is_null()、isset()、(bool)区别
- php empty,isset,is_null比较(差异与异同)
- POJ 1459 最大流 第二题
- 题集
- js条件语句false情况
- 2015武大校赛
- POJ2823 单调队列
- 判断变量是否不为空,函数isset()、!empty()与!is_null()的比较
- POJ2411 状态压缩dp
- uva 11248 最小割
- LA 2531 The K-league 最大流
- FFT之大数乘法
- 最短路 spfa, dijkstra, Floyd
- Android布局详解之一:FrameLayout
- K短路 spfa + A*
- JAVA学习【2】错误:无法从静态上下文中引用非静态