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

  • 相关阅读:
    CentOS6.8下安装Docker
    xshell连接Linux(centos6.8)失败的解决方法
    Windows Server定时执行bat
    [译]看漫画学Flux
    LeetCode题型分类及索引
    LeetCode & Q38-Count and Say-Easy
    LeetCode & Q20-Valid Parentheses-Easy
    LeetCode & Q14-Longest Common Prefix-Easy
    LeetCode & Q13-Roman to Integer-Easy
    LeetCode & Q28-Implement strStr-Easy
  • 原文地址:https://www.cnblogs.com/KillBugMe/p/13151766.html
Copyright © 2011-2022 走看看