php踩过的那些坑(4) false,NULL,0,''详解
2017-12-29 10:54
435 查看
一、前方有坑
php开发过程中,难免会遇到这四个值:false,null,0,’',并且也会对这四个值进行比较,然后分别进行业务代码处理。一招不慎,就会踩到坑,影响数据判断的正确性和安全性,以至于造成代码不健壮,给程序的测试和运行造成很多的麻烦。看如下代码:
$a = NULL; $b = ''; $c = 0; $d = false;
echo ($a == $b)?1:0; // 输出1
echo ($a === $b)?1:0; // 输出0
echo ($a == $c)?1:0; // 输出1
echo ($a === $c)?1:0; // 输出0
echo ($b == $c)?1:0; // 输出1
echo ($b === $c)?1:0; // 输出0
echo ($a == $d)?1:0; // 输出1
echo ($a === $d)?1:0; // 输出0
二、防坑策略
== 会先进行类型转换,再进行对比,而===会先比较类型,如果类型不同直接返回不相等。三、为啥有坑
先了解这四个值的类型:$a = NULL; $b = ''; $c = 0; $d = false;
echo gettype($a); //输出NULL
echo gettype($b); //输出string
echo gettype($c); //输出integer
echo gettype($d); //输出boolean
原来这四个值的类型是不一样的!所以结合防坑策略就好理解了。
人生有坑,处处提防
其实,在PHP中变量是以C语言的结构体来存储的,''、NULL,false都是以值为0存储的,其中这个结构体有个zend_uchartype;这样的成员变量,他是用来保存变量的类型的,并且''的类型是string,NULL的类型是NULL,false是boolean。
四、防坑提示
扩展一下对这四个值的理解:$a = NULL; $b = ''; $c = 0; $d = false;
echo isset($a) ? 1:0; //输出0
echo isset($b) ? 1:0; //输出1
echo isset($c) ? 1:0; //输出1
echo isset($d) ? 1:0; //输出1
echo '<br>';
echo is_null($a) ? 1:0; //输出1
echo is_null($b) ? 1:0; //输出0
echo is_null($c) ? 1:0; //输出0
echo is_null($d) ? 1:0; //输出0
echo '<br>';
echo empty($a) ? 1:0; //输出1
echo empty($b) ? 1:0; //输出1
echo empty($c) ? 1:0; //输出1
echo empty($d) ? 1:0; //输出1
世界上本没有坑,坑的人多了也就成了坑
相关文章推荐
- php 0,null,false,empty,isset详解
- php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
- php中0,null,empty,空,false,字符串关系详解
- php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
- php中0,null,empty,空即''与false的关系
- php中0,null,empty,空,false,字符串关系详解
- php中0,null,empty,空,false,字符串关系详解
- php中0,null,empty,空,false,字符串关系详解
- php null o false ''
- php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
- php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
- php中0与NULL,False,“0”,"\0"的区别
- 掉进PHP中的坑--null,0,false,空字符串
- 详解PHP中的null合并运算符
- php中0," ",null和false的区别
- php中0," ",null和false的区别
- PHP中空字符串介绍0、null、empty和false之间的关系
- php部分---include()与require()的区别、empty()与isset is_null的区别与用法详解
- php中0," ",null和false的区别
- php中null,0,'',false的区别