php踩过的那些坑(4) false,NULL,0,''详解

一、前方有坑

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踩过的那些坑(4) false,NULL,0,''详解

原文地址:https://www.cnblogs.com/phpfensi/p/8143363.html

时间: 2024-10-14 19:11:52

php踩过的那些坑(4) false,NULL,0,''详解的相关文章

iOS开发之集成百度地图踩过的那些坑(基于 Xcode7.0/iOS9.2)

本篇分4步讲述如何在项目中集成百度地图: 第一步:创建项目 第二步:利用 cocoaPod 导入百度地图的 SDK(pod 'BaiduMapKit' #百度地图SDK) 第三步:在 pch 文件中导入头文件和秘钥 秘钥是在 http://lbsyun.baidu.com/apiconsole/key 百度开放平台申请. #define APPKEY @"UzyiXewPsqPhcE1yS8wxqik9" 在使用SDK的类时按需引入下边的头文件 #import <BaiduMap

关于null == 0?返回false的问题

1.首先我们先看各种情况的结果: null > 0? //=>false null < 0? //=>false null >= 0? //=>true null <= 0? //=>true 由以上四种情况我们很容易推出 null == 0?的结果,什么呢?true?false?  其实答案为false,为什么? 1.首先null > 0; 和 null < 0; 的结果是将null转换为数字0来进行的比较判断: 而判断null >= 0

Redis上踩过的一些坑

来自: http://blog.csdn.net//chenleixing/article/details/50530419 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团网在redis上踩得一些坑,讲的都是干货和坑. 分为5个部分: 一. 周期性出现connect timeout 二.redis bgrewriteaof问题 三.redis内存占用飙升 四.redis内存使用优化 五.redis cluster遇到的一些问题 一.周期性

[原创] 关于免费VPN我踩过的那些坑

关于免费VPN我踩过的那些坑 因为工作的关系,笔者经常需要用到VPN, 访问国外国网站,你懂的. 我曾经试着自己购买VPS搭建过VPN, 被封了后就没心情再维护了,毕竟直接买VPN比VPS便宜太多.时间一长,也就有了一些经验. 这里总结成表格的形式,分享给大家: [NydusVPN] 知乎推荐的香港VPN, 比直通车好,线路稳定性好,办公游戏适合.注册前7天内可以无条件退款哦.  官方网站  [Astrill] 老牌VPN,但近两年被封底得太厉害,现在已经不太给力了. 注册第一个月能免费使用(付

三分之一的程序猿之社交类app踩过的那些坑

三分之一的程序猿之社交类app踩过的那些坑 万众创新,全民创业.哪怕去年陌生人社交不管融资与否都倒闭了不知道多少家,但是依然有很多陌生人社交应用层出不穷的冒出来.各种脑洞大开,让人拍案叫起. 下面我们来挑选一些app. NO1 陌陌 陌陌为什么能火.陌陌为什么能上市,陌陌的崛起直接引领了陌生人社交的火热,后来者都称自己为“陌陌之后,下一代陌生人社交***”的称号. 像这些都项目都是想做下一个陌陌,至于为什么陌陌能成功,我会告诉你,真正的原因就是,陌陌是第一个以“约炮”为噱头的app,强占先机.其

安装python爬虫scrapy踩过的那些坑和编程外的思考

这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬虫的比较发现开源爬虫scrapy比较好用.但是以前一直用的java和php,对python不熟悉,于是花一天时间粗略了解了一遍python的基础知识.然后就开干了,没想到的配置一个运行环境就花了我一天时间.下面记录下安装和配置scrapy踩过的那些坑吧. 运行环境:CentOS 6.0 虚拟机 开始上来先得安装python运行环境.然而我运行了一下python命令,发现已经自带了,窃(大)喜(坑).于是go

【Fine原创】JMeter分布式测试中踩过的那些坑

最近因为项目需要,研究了性能测试的相关内容,并且最终选用了jmeter这一轻量级开源工具.因为一直使用jmeter的GUI模式进行脚本设计,到测试执行阶段工具本身对资源的过量消耗给性能测试带来了瓶颈,一般线程加到100左右就会出现工具本身无法支撑的问题,广泛了解解决办法后,发现分布式部署测试机仍是首选方案. 关于如何配置jmeter分布式部署测试机很多博客上已经描述得很详细了,这里就不再赘述,可以参考虫师的博客: http://www.cnblogs.com/fnng/archive/2012/

phonegap开发app中踩过的那些坑

把遇到的问题列出来,如果有解决方案的,偶也会写下来,如果大家有更好解决方法的,欢迎留言噢 phonegap 2.9无法触发deviceready事件 亲们可以看下控制台有木有报错,如果有提示cordova_plugins.json 404 (Not Found) ,就在www目录下新建个空文件,命名为cordova_plugins.json就好了,cordova初始化的时候会请求这个文件,但po主还没发现这个文件有啥用,但是没有这个文件的话,cordova初始化失败,自然不会触发devicere

美团在Redis上踩过的一些坑-目录(本人非美团)(转)

来自:http://carlosfu.iteye.com/blog/2254154 分为5个部分: 一.周期性出现connect timeout 二.redis bgrewriteaof问题 三.redis内存占用飙升 四.redis内存使用优化 五.redis cluster遇到的一些问题 附赠PPT: (1) 本次:美团在Redis上踩过的一些坑PPT (2) 以往:<Redis在新浪的大规模运维经验>-演讲人:侯军伟新浪高级DBA.pdf 美团数据库运维平台介绍.pdf