$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' ; '' ; false 】:这四个为存在,php底层是开辟zval空间存储,有value,有type

结论二:

1、string '0'与 string '' 不相等,(想一下就明白,同类型比较【1个长度】的字符串怎么可能 等于 【0个长度】 的字符串)

2、int 0 却和 string '' 空相等,(非同类形比较,php会做类型转换)

3、string '0' 与 null 不相等,int 0 与 null 相等

php中0,空,null和false之间区别的更多相关文章

  1. php中0,空,null和false的区别

    <? $str1 = null; $str2 = false; echo $str1==$str2 ? ‘相等’ : ‘不相等’; $str3 = ""; $str4 = 0 ...

  2. C++中 0 与 NULL 与 nullptr之间的关系,nullptr_t 的实现

    C++中 0 与 NULL 与 nullptr之间的关系,nullptr_t 的实现 来源 http://blog.csdn.net/Virtual_Func/article/details/4975 ...

  3. php中0," ",null和false的区别

    php中很多还不懂php中0,"",null和false之间的区别,这些区别有时会影响到数据判断的正确性和安全性,给程序的测试运行造成很多麻烦.先看一个例子: <? $str ...

  4. python中None与0、Null、false区别

    None是Python中的一个关键字,None本身也是个一个数据类型,而这个数据类型就是None,它可0.空字符串以及false均不一样,这些都只是对象,而None也是一个类. 给个bool测试: v ...

  5. 0,null,undefined,[],{},'',false之间的关系

    0与一些虚值的比较: 0与false 0==false true 0与'': =='' true 0与[]: ==[] true 0与NaN: 0==NaN false 0与undefined 0== ...

  6. js 中 0 和 null 、"" Boolean 值关系

    在做字符串非空判断时,无意发现一个问题,记录下以便以后回顾. 问题描述:非空判断,只是校验传值的内容是否为"".null .undefined.当变量 赋值的字符串内容为 0,此时 ...

  7. Unity 3D Intantiate过程中Transform 空物体和本体之间的关系

    想当年刚学Unity的时候,这个问题困扰了我好几天,因此来分享一下当初解决问题的思路. 我们通过Unity构建场景的过程中,经常发现一个现象,就是物体在拖进场景中后,我们会发现物体是反的,通过改变物体 ...

  8. js中NAN、NULL、undefined的区别

    NaN:保留字(表明数据类型不是数字) undefined:对象属性或方法不存在,或声明了变量但从未赋值.即当你使用了对象未定的属性或者未定义的方法时或当你声明一个变量,但你确从未对其进行赋值,便对其 ...

  9. jquery 中cache为true与false 的区别

    $.ajax({type: "get",cache: false,url: url,success: function (msg) { }}); cache为true与false ...

随机推荐

  1. (转)Go中的string和[]byte对比

    本文转自:https://sheepbao.github.io/post/golang_byte_slice_and_string/ 作者:boya 声明:本文目的仅仅作为个人mark,所以在翻译的过 ...

  2. GO语言的进阶之路-goroutine(并发)

    GO语言的进阶之路-goroutine(并发) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有人把Go比作21世纪的C 语言,第一是因为 Go语言设计简单,第二,21世纪最重要的 ...

  3. 基于URL的HAProxy负载均衡设置

    例子包括ACL的url_beg. url_beg提交URL中使用的字符串相匹配. 使用URL /blog(cnblog/api)所有请求重定向到WEB服务器的6200端口.所有其他请求将重定向到服务器 ...

  4. Executor, ExecutorService 和 Executors 间的不同

    java.util.concurrent.Executor, java.util.concurrent.ExecutorService, java.util.concurrent. Executors ...

  5. [HAOI2018]奇怪的背包 (DP,数论)

    [HAOI2018]奇怪的背包 \(solution:\) 首先,这一道题目的描述很像完全背包,但它所说的背包总重量是在模P意义下的,所以肯定会用到数论.我们先分析一下,每一个物品可以放无数次,可以达 ...

  6. getattr getattribute setattr hasattr delattr

    getattr是返回对象属性value的函数,用法:getattr(object,attribute_name[,default]) 如果对象拥有属性,则返回属性value,如果对象没有该属性并且也没 ...

  7. C - Musical Theme (后缀数组)

    题目链接:https://cn.vjudge.net/contest/283743#problem/C 题目大意:给你n个数组,然后问你是否有多个“相似”且不重叠的子串的长度大于等于5(两个子串相似当 ...

  8. python3 三元表达式,列表解析

    python3 三元表达式,列表解析 三元表达式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 x=2 y=3   if x > y ...

  9. box-cox 转换

    box-cox 由于线性回归是基于正态分布的前提假设,所以对其进行统计分析时,需经过数据的转换,使得数据符合正态分布. Box 和 Cox在1964年提出的Box-Cox变换可使线性回归模型满足线性性 ...

  10. 【Shell】获取当前路径

    bathpath=$(cd dirname $0 ; pwd)