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,''详解的更多相关文章
- iOS开发之集成百度地图踩过的那些坑(基于 Xcode7.0/iOS9.2)
本篇分4步讲述如何在项目中集成百度地图: 第一步:创建项目 第二步:利用 cocoaPod 导入百度地图的 SDK(pod 'BaiduMapKit' #百度地图SDK) 第三步:在 pch 文件中导 ...
- null的坑 和 比较运算符、相等运算符的隐式转换问题 (在javascript中,null>=0 为真,null<=0 为真,null==0却为假,null到底是什么?)
null在关系运算中的坑 & 关系运算符的隐式转换问题 注意: 比较运算符 和 相等运算符 的 ECMAscript 语法实现不同. 比较运算符 和 相等运算符 对数据进行了隐式转换, 相当于 ...
- 关于null == 0?返回false的问题
1.首先我们先看各种情况的结果: null > 0? //=>false null < 0? //=>false null >= 0? //=>true null ...
- [置顶]
xamarin android toolbar(踩坑完全入门详解)
网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...
- Golang 新手可能会踩的 50 个坑【转】
译文:https://github.com/wuYin/blog/blob/master/50-shades-of-golang-traps-gotchas-mistakes.md 原文:50 Sha ...
- Redis上踩过的一些坑
来自: http://blog.csdn.net//chenleixing/article/details/50530419 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DB ...
- Golang 新手可能会踩的 50 个坑
前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷.如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到. 如果花时间学习官方 ...
- mybatis-generator:generate 生成代码配置踩坑详解
mybatis-generator:generate 生成代码配置踩坑不少,在此留下笔记以便后续填坑 一.mysql返回时间问题 错误信息: [ERROR] Failed to execute goa ...
- Golang 需要避免踩的 50 个坑1
最近准备写一些关于golang的技术博文,本文是之前在GitHub上看到的golang技术译文,感觉很有帮助,先给各位读者分享一下. 前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免 ...
随机推荐
- 博客文章编辑器 Cmd Markdown
欢迎使用 Cmd Markdown 编辑阅读器 编辑器点击打开链接 学习语言地址点击打开链接
- Kruskal算法求最小生成树 笔记与思路整理
整理一下前一段时间的最小生成树的算法.(其实是刚弄明白 Kruskal其实算是一种贪心算法.先将边按权值排序,每次选一条没选过的权值最小边加入树,若加入后成环就跳过. 先贴张图做个示例. (可视化均来 ...
- AutoCad 二次开发 .net 之相同块的自动编号
主要步骤: 一.获取一个块的id: 其中oId就是了. 二.通过次oId获取块引用blkRef: 三.通过它获取所有相同的块引用的id集合: 四.通过步骤三的集合得到所有的块引用得到集合listBr: ...
- P2380 狗哥采矿
#include<iostream> #include<algorithm> #include<cstring> ; using namespace std; in ...
- 小白学 Python(21):生成器基础
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- JS 暴虐算法查找
@dd|ad|fds|d@dd|ad|fds|d@dd|ad|fds|d@ var e = []; window.onload = function () { var ...
- T-SQL Part VI: Prevent error message "Saving changes is not permitted" in SSMS
使用SSMS时,经常遇到的问题是,修改一张table时,弹出一个错误对话框:“Saving changes is not permitted”. 这个错误通常是因为以下错误(参阅MSDN的KB文档 h ...
- VS 使用 :新建项目
1.文件位置不放C盘
- Nginx Linux和Windows安装教程
前言 本篇文章主要介绍的是Nginx Linux环境和Windows的安装教程. Nginx 介绍 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Syso ...
- 关于element-ui级联菜单(城市三级联动菜单)和回显问题
https://segmentfault.com/a/1190000020458087 这是我写的,可以去看看,希望对你们有帮助!!!