判断变量是否不为空,函数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(),以自身为参数的区别

  1. isset()、!empty()会首先检查变量是否存在(存在返回true),然后再对变量值进行检测;
    is_null()、以自身为参数,直接检查变量值是否为null,如果变量未定义会出现错误警告。
  2. isset()、!empty()的输入参数必须是一个变量($变量),因为它们是语言结构,不是函数,无法被变量函数调用(参考阅读:可变函数);
    is_null()、以自身为参数,输入参数只要是能够有返回值的就可以(常量、变量、表达式等都可以);
  3. 判断为空的时刻:
    • 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 null

try:$test2=空字符串””
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 null

try:$test3=空数组array()
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 null

try:$test4=数值0
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 null

try:$test5=字符”0”
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 null

try:$test6=false
isset 1 define
!empty 0 empty
!is_null 1 no null
以自身为参数 0 null

try:$test7=null
isset 0 undefine
!empty 0 empty
!is_null 0 null
以自身为参数 0 null

try:$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):

函数/$t的值 备注 isset($t) !empty($t) !is_null($t) $t 100 有值 1 1 1 1 “” 空字符串 1 0 1 0 array() 空数组 1 0 1 0 0 数值0 1 0 1 0 “0” 字符0 1 0 1 0 false false 1 0 1 0 null null 0 0 0 0 这里$t未定义 0 0 0(Notice) 0(Notice)

从上表可知:

  • 对于值为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
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买手机送话费的卡不想用了怎么办 到银行存钱被骗买保险了怎么办 去银行存钱被骗买了保险怎么办 京东申请退款后卖家又发货了怎么办 苹果6s没有4g网怎么办 花呗分期付款买手机额度不够怎么办 手机天猫不支持购买淘宝商品怎么办 天猫国际购买商品狠盾怎么办 在微信上微拍堂买东西被骗了怎么办 京东自营买到返修手机怎么办? 7p弯了怎么办能修复吗 农商银行app登录密码忘了怎么办 网址上的重庆时时彩不能提现怎么办 天天中彩票自己账户登录不了怎么办 天猫上卖王者荣耀的兑换码是怎么办 身份证借别人开淘宝永久封店怎么办 天猫店铺被扣12分怎么办 天猫法人变更之前的天猫贷款怎么办 在日本旅游遇到精日导游怎么办 银行资金交易异常卡被冻结怎么办 如果淘宝被盗了店铺乱上东西怎么办 快递不送货直接代售点签收怎么办 淘宝快递没收到却显示已签收怎么办 支付宝余额未满16受限怎么办 未满16岁支付宝余额受限怎么办 手机天猫购物买的数量大怎么办 扣扣游戏领礼包出现账号异常怎么办 美容院转让给别人客人要退钱怎么办 卖家毁约中介费担保费怎么办 天猫买东西店家不开增值税票怎么办 天猫专卖店品牌不授权了怎么办 临时京东账号被冻结买的东西怎么办 天猫强行退款给买家商家怎么办 淘宝店铺没交保证金被释放了怎么办 沭阳县地段生过了报名时间怎么办 淘宝买东西地址和收件人填错怎么办 才装修的房子马上要住怎么办 淘宝发货显示无效的发货人怎么办 微信位置和所在地位置不一样怎么办 qq号被冻结了短信发不出去怎么办 商户刷自己信息卡被冻结怎么办