• 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

  • 相关阅读:
    第五周作业
    画图实例:一个计算机商店的基于Wed的订单处理系统的DFD图和ER图
    为什么要进行需求分析?通常对软件系统有哪些需求?
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里
    几大开发模式的区别与联系
    说说我的困惑
    Python单元测试——深入理解unittest
    Devexpress 自定义下拉列表
    Devexpress TextEdit设置文本只能输入数字
    jetbain软件授权码
  • 原文地址:https://www.cnblogs.com/softidea/p/5447496.html
Copyright © 2020-2023  润新知