zoukankan      html  css  js  c++  java
  • php中empty()、isset()、is_null()和变量本身的布尔判断区别(转)

    在php脚本中,我们经常要去判断一个变量是否已定义或者是否为空,就需要用到这些函数empty()、isset()、is_null()和其本身作为参数,下面小段程序做个简要比较

    复制代码
    <?php
    //预定义变量数组:空字符,字符0,数组0,null,布尔false,空数组
    $arr_var = array('', '0', 0, null, false, array());

    foreach ($arr_var as $value) {
    echo '<br>传入值为:' . $value . '<br>';
    if (!isset($value)) {
    echo 'isset()==false<br>';
    }
    if (empty($value)) {
    echo 'empty()==true<br>';
    }
    if (!$value) {
    echo 'self==false<br>';
    }
    if (is_null($value)) {
    echo 'is_null()==true<br>';
    }
    }
    ?>
    输出结果:

    传入值为:
    empty()==true
    self==false

    传入值为:0
    empty()==true
    self==false

    传入值为:0
    empty()==true
    self==false

    传入值为:
    isset()==false
    empty()==true
    self==false
    is_null()==true

    传入值为:
    empty()==true
    self==false

    传入值为:Array
    empty()==true
    self==false

    复制代码

    总结一:从结果中可以看出,""0"0"NULLFALSEarray()这几个中,empty()和“变量本身作为参数”结果一致,均作为“空”来处理,而isset()和is_null ()仅当是null时,才作为“空”来处理(值得注意的是false并不会被认为是空)

    下面我们看下当一个变量未定义初始化时,这些函数返回的是什么

    复制代码
    echo '<br>传入值为:undefine<br>';
    if (!isset($value_undefine)) {
    echo 'isset()==false<br>';
    }
    if (empty($value_undefine)) {
    echo 'empty()==true<br>';
    }
    if (!$value_undefine) {
    echo 'self==false<br>';
    }
    if (is_null($value_undefine)) {
    echo 'is_null()==true<br>';
    }
    输出结果:

    传入值为:undefine
    isset()==false
    empty()==true

    (此处警告变量未定义)
    self==false

    (此处警告变量未定义)
    is_null()==true
    复制代码

     总结二:由结果可看出,当变量未定义时,is_null()和“本身参数”是不允许作为参数判断的,虽然结果可以判断出来为“空”,建议不使用。

    isset()和empty()可以正常判断出为"空"的.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    最后总结:
     
    isset(),仅当null和未定义,返回false
     
    empty(),""、0、"0"、NULL、FALSE、array(),未定义,均返回false
     
    本身作为参数,与empty()一致,但接受未定义变量时,报警告
     
    is_null(),仅判断是否为null,未定义报警告
     

    http://www.cnblogs.com/huangzhen/archive/2011/08/21/2147808.html#3303118

  • 相关阅读:
    Leetcode 811. Subdomain Visit Count
    Leetcode 70. Climbing Stairs
    Leetcode 509. Fibonacci Number
    Leetcode 771. Jewels and Stones
    Leetcode 217. Contains Duplicate
    MYSQL安装第三步报错
    .net 开发WEB程序
    JDK版本问题
    打开ECLIPSE 报failed to load the jni shared library
    ANSI_NULLS SQL语句
  • 原文地址:https://www.cnblogs.com/softidea/p/5447496.html
Copyright © 2011-2022 走看看