zoukankan      html  css  js  c++  java
  • php empty,isset,is_null比较(差异与异同)

    做php开发时候,想必在使用:empty,isset,is_null  这几个函数时候,遇到一些问题。甚至给自己的程序带来一些安全隐患的bug。很多时候,对于isset,empty都认为差不多。因此开发时候,就没有注意,一段作为流程判断时候,就出现bug问题了。

    一、举例说明

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

     

    <?php
    #不存在$test 变量
    
    $isset= isset($test)?"test is define!":"test is undefine!";
    echo "isset:$isset\r\n";
    
    $empty=!empty($test)?"test is define!":"test is undefine!";
    echo "empty:$empty\r\n";
    
    $is_null=is_null($test)?"test is define!":"test is undefine!";
    echo "is_null:$is_null\r\n";

    测试结果是:

    image

    结果出来了: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个函数进行比较文章。很少涉及这些。下面我要说的,是在都检查已存在变量情况下,不同之处。

    实例:

    <?php
    $a=100;
    $b="";
    $c=null;
    //isset检查
    echo "isset","\$a=$a",isset($a)?"define":"undefine","\r\n";
    echo "isset","\$b=$b",isset($b)?"define":"undefine","\r\n";
    echo "isset","\$c=$c",isset($c)?"define":"undefine","\r\n";
    unset($b);
    echo "isset","\$b",isset($b)?"define":"undefine","\r\n";
    $b=0;
    echo "\r\n\r\n";
    
    //empty检查
    echo "empty","\$a=$a",!empty($a)?"no empty":"empty","\r\n";
    echo "empty","\$b=$b",!empty($b)?"no empty":"empty","\r\n";
    echo "empty","\$c=$c",!empty($c)?"no empty":"empty","\r\n";
    unset($b);
    echo "empty","\$b",!empty($b)?"no empty":"empty","\r\n";
    $b=0;
    echo "\r\n\r\n";
    
    //is_null检查
    echo "is_null","\$a=$a",!is_null($a)?"no null":"null","\r\n";
    echo "is_null","\$b=$b",!is_null($b)?"no null":"null","\r\n";
    echo "is_null","\$c=$c",!is_null($c)?"no null":"null","\r\n";
    unset($b);
    echo "is_null","\$b",is_null($b)?"no null":"null","\r\n";
    

    image

    通过上面这个简单测试,我们可以大体知道,当一个变量存在情况下: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 . 哈哈,这个问题怎么样解决呢?等待大家分享……

  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/chengmo/p/1854258.html
Copyright © 2011-2022 走看看