设为首页收藏本站

就爱编程论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 362|回复: 2
打印 上一主题 下一主题

php empty,isset,is_null比较 [复制链接]

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    无聊
    2025-5-27 03:37:20
  • 签到天数: 366 天

    [LV.9]以坛为家II

    论坛先锋 学习至圣 荣誉成员 论坛元老 活跃之星 终极领袖

    我玩的应用:

    跳转到指定楼层
    楼主
    发表于 2011-8-30 14:51:07 |只看该作者 |倒序浏览
    做php开发时候,想必在使用:empty,isset,is_null  这几个函数时候,遇到一些问题。甚至给自己的程序带来一些安全隐患的bug。很多时候,对于isset,empty都认为差不多。因此开发时候,就没有注意,一段作为流程判断时候,就出现bug问题了。


    一、举例说明
    A.一个变量没有定义,我们该怎么样去判断呢?

    01<?php

    02#不存在$test 变量

    03  

    04$isset= isset($test)?"test is define!":"test is undefine!";

    05echo "isset:$isset\r\n";

    06  

    07$empty=!empty($test)?"test is define!":"test is undefine!";

    08echo "empty:$empty\r\n";

    09  

    10$is_null=is_null($test)?"test is define!":"test is undefine!";

    11echo "is_null:$is_null\r\n";




    测试结果是:
    [/url]
    结果出来了:empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!
    B、看下各自接收的参数是什么?
    isset函数参数:
    <?php
    $test=100;
    echo isset($test),isset(100),$isset($b=100);

    <br />
    <b>Parse error</b>:  parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />
    empty函数参数:
    <?php
    $test=100;
    echo empty($test),empty(100),empty($b=100);

    <br />
    <b>Parse error</b>:  parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />
    is_null函数参数:
    <?php
    $test=100;
    echo is_null($test),is_null(100),is_null($b=100);
    运行结果:没有任何错误。
    比较结果出来了:empty,isset输入参数必须是一个变量(php变量是以$字符开头的),而is_null输入参数只要是能够有返回值就可以。(常量,变量,表达式等)。在php手册里面,对于他们解析是:empty,isset 是一个语言结构而非函数,因此它无法被变量函数调用。

    二、概括总结isset,empty,is_null区别:
    刚才介绍的:检查变量,以及参数类型,这个是这3个函数不同之处的基础,也是最容易被忽视的。看到网上有很多对这个3个函数进行比较文章。很少涉及这些。下面我要说的,是在都检查已存在变量情况下,不同之处。
    实例:
    01<?php

    02$a=100;

    03$b="";

    04$c=null;

    05//isset检查

    06echo "isset","\$a=$a",isset($a)?"define":"undefine","\r\n";

    07echo "isset","\$b=$b",isset($b)?"define":"undefine","\r\n";

    08echo "isset","\$c=$c",isset($c)?"define":"undefine","\r\n";

    09unset($b);

    10echo "isset","\$b",isset($b)?"define":"undefine","\r\n";

    11$b=0;

    12echo "\r\n\r\n";

    13  

    14//empty检查

    15echo "empty","\$a=$a",!empty($a)?"no empty":"empty","\r\n";

    16echo "empty","\$b=$b",!empty($b)?"no empty":"empty","\r\n";

    17echo "empty","\$c=$c",!empty($c)?"no empty":"empty","\r\n";

    18unset($b);

    19echo "empty","\$b",!empty($b)?"no empty":"empty","\r\n";

    20$b=0;

    21echo "\r\n\r\n";

    22  

    23//is_null检查

    24echo "is_null","\$a=$a",!is_null($a)?"no null":"null","\r\n";

    25echo "is_null","\$b=$b",!is_null($b)?"no null":"null","\r\n";

    26echo "is_null","\$c=$c",!is_null($c)?"no null":"null","\r\n";

    27unset($b);

    28echo "is_null","\$b",is_null($b)?"no null":"null","\r\n";




    [url=http://images.cnblogs.com/cnblogs_com/chengmo/WindowsLiveWriter/phpemptyissetis_null_9AC5/image_4.png]

    通过上面这个简单测试,我们可以大体知道,当一个变量存在情况下:isset,empty,is_null检测,得到值情况了。上面没有举例更多变量。其实测试发现:
    empty
    如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULLFALSE、array()、var $var、未定义; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE
    isset
    如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。
    is_null
    检测传入值【值,变量,表达式是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】.

    疑问:怎么样判断一个变量被设置了,并且值为NULL呢?
    通过上面比较,估计大家与我一样,会有这个问题浮现在脑海里面。 检测一个变量是否是null 可以用:is_null,但如果变量未定义用它检测会出错。因此,我们想到,检测变量是否定义可以用:isset,但是如果一个变量值是:null, 则它会返回false . 哈哈,这个问题怎么样解决呢?等待大家分享……
    附件: 你需要登录才可以下载或查看附件。没有帐号?注册 人人连接登陆
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 支持支持0 反对反对0 分享到人人 转发到微博
    [img=http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=fRUcHhYWGAQ9GxIFEBwUEVMeEhA]http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png[/img]

    使用道具 举报

    Rank: 2

    升级 
     
    0%

    该用户从未签到

    沙发
    发表于 2011-9-3 23:30:13 |只看该作者
    楼主高人啊,我先收藏了












    www.byelu.com  买大专文凭

    使用道具 举报

    Rank: 3Rank: 3

    升级 
     
    52.33%

    该用户从未签到

    板凳
    发表于 2011-10-11 22:31:48 |只看该作者

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    晴云孤魂's Blog|就爱编程搜帖|手机版|Archiver|就爱编程论坛     

    GMT+8, 2025-7-2 05:04 , Processed in 0.117977 second(s), 34 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部