zoukankan      html  css  js  c++  java
  • php中0,空,null和false的区别【转】

    var_dump(1 == true); //bool(true)
    var_dump(0 == false); //bool(true)
     
    var_dump(-1 == false); //bool(false)
    var_dump(0 == true); //bool(false)
     
     
    var_dump("" == false); //bool(true)
    var_dump("0" == false); //bool(true)
    var_dump(" " == true); //bool(true)
    var_dump("0.00" == true); //bool(true)
     
     
     
    var_dump(array() == ''); //bool(false)
    var_dump(array() === ''); //bool(false)
    var_dump(array() == NULL); //bool(true)
    var_dump(array() === NULL); //bool(false)
    var_dump(array() == 0); //bool(false)
    var_dump(array() === 0); //bool(false)
    var_dump(array() == false); //bool(true)
    var_dump(array() === false); //bool(false)
    var_dump(array() == true); //bool(false)
    var_dump(array() === true); //bool(false)
     
     
     
    echo (int)true;
    echo (int)false;
    echo intval(true);
    echo intval(false);
    echo true + true;
    echo true + false;
     
    var_dump((bool) 1);         // bool(true)
    var_dump((bool) 0);         // bool(false)
     
     
    var_dump(null == 0); //bool(true)
    var_dump(null === 0); //bool(false)
    var_dump(null == false); //bool(true)
    var_dump(null === false); //bool(false)
    var_dump(null == true); //bool(false)
    var_dump(null === true); //bool(false)
    
    
    $a =  0;
    $b="0";
    $c= '';
    $d= null;
    $e = false;
    
    echo "5个变量-原始测试类型";
        var_dump($a);//int 0
        var_dump($b);//string '0'
        var_dump($c);//string ''
        var_dump($d);//null
        var_dump($e);//boolean false
    
    echo "<h4>empty测试</h4>";
        var_dump(empty($a));//true
        var_dump(empty($b));//true
        var_dump(empty($c));//true
        var_dump(empty($d));//true
        var_dump(empty($e));//true
    
    echo "<hr>";
        var_dump(isset($a));//true
        var_dump(isset($b));//true
        var_dump(isset($c));//true
        var_dump(isset($d));//【false】 见结论一
        var_dump(isset($e));//true
    
    echo "<h4>(==)双等式测试</h4>";
        var_dump($a == $b);//true
        var_dump($a == $c);//true
        var_dump($a == $d);//true
        var_dump($a == $e);//true !!
    
        var_dump($b == $c);//【false】见结论二
        var_dump($b == $d);//【false】见结论二
        var_dump($b == $e);//true
    
        var_dump($c == $d);//true
        var_dump($c == $e);//true
    
    echo "<h4>(===)三等式测试</h4>";
        var_dump($a === $b);//false
        var_dump($a === $c);//false
        var_dump($a === $d);//false
        var_dump($a === $e);//false
    
        var_dump($b === $c);//false
        var_dump($b === $d);//false
        var_dump($b === $e);//false
    
        var_dump($c === $d);//false
        var_dump($c === $e);//false
    

    总结:
    对于 【0 '0'''null false】五种类型
    empty操作以上五个变量,都返回false
    强等于 (===) 比较 都为false,同强语言结果(三个等号比较不但要比较值,而且要比较类型)
    但对于 (==) 比较,需要注意string类型,涉及到底层结构与类型转换

    结论一:关于变量类型的理解
    1.null为不存在之意:php底层的zval空间里(结构见下方)没有存其value值,只存储了一个type标志其 IS_NULL(所以解释了 empty(null)=true,isset(null)=false ,isset('')=true)
    2.【0 ; '0' ; '' ; false 】:这四个为存在,php底层是开辟zval空间存储,有value,有type

    结论二:
    1、string '0'与 string '' 不相等,(想一下就明白,同类型比较【1个长度】的字符串怎么可能 等于 【0个长度】 的字符串)
    2、int 0 却和 string '' 空相等,(非同类形比较,php会做类型转换)
    3、string '0' 与 null 不相等,int 0 与 null 相等

    参考链接:
    http://yuncode.net/code/c_547e7f91af43581
    https://blog.csdn.net/ty_hf/article/details/70217267

  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/KillBugMe/p/13151766.html
Copyright © 2011-2022 走看看