一、前方有坑

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,''详解的更多相关文章

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

    本篇分4步讲述如何在项目中集成百度地图: 第一步:创建项目 第二步:利用 cocoaPod 导入百度地图的 SDK(pod 'BaiduMapKit' #百度地图SDK) 第三步:在 pch 文件中导 ...

  2. null的坑 和 比较运算符、相等运算符的隐式转换问题 (在javascript中,null>=0 为真,null<=0 为真,null==0却为假,null到底是什么?)

    null在关系运算中的坑 & 关系运算符的隐式转换问题 注意: 比较运算符 和 相等运算符 的 ECMAscript 语法实现不同. 比较运算符 和 相等运算符 对数据进行了隐式转换, 相当于 ...

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

    1.首先我们先看各种情况的结果: null > 0? //=>false null < 0? //=>false null >= 0? //=>true null ...

  4. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  5. Golang 新手可能会踩的 50 个坑【转】

    译文:https://github.com/wuYin/blog/blob/master/50-shades-of-golang-traps-gotchas-mistakes.md 原文:50 Sha ...

  6. Redis上踩过的一些坑

    来自: http://blog.csdn.net//chenleixing/article/details/50530419 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DB ...

  7. Golang 新手可能会踩的 50 个坑

    前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷.如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到. 如果花时间学习官方 ...

  8. mybatis-generator:generate 生成代码配置踩坑详解

    mybatis-generator:generate 生成代码配置踩坑不少,在此留下笔记以便后续填坑 一.mysql返回时间问题 错误信息: [ERROR] Failed to execute goa ...

  9. Golang 需要避免踩的 50 个坑1

    最近准备写一些关于golang的技术博文,本文是之前在GitHub上看到的golang技术译文,感觉很有帮助,先给各位读者分享一下. 前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免 ...

随机推荐

  1. [知识图谱]利用py2neo从Neo4j数据库获取数据

    # -*- coding: utf-8 -*- from py2neo import Graph import json import re class Neo4jToJson(object): &q ...

  2. 我跟上家老板说过的最后一句话:转.NET Core吧

    最近几天浩子终于刚刚脱离了令人发指工作,一者是年底了,一者是不要向生活低头,就在这时我选择了第二者. 上家是做物联网的,人数不多,七八名开发人员,感觉都还可以,都很年轻没有秃顶,糊里糊涂就选择了入职. ...

  3. 梯度下降法及一元线性回归的python实现

    梯度下降法及一元线性回归的python实现 一.梯度下降法形象解释 设想我们处在一座山的半山腰的位置,现在我们需要找到一条最快的下山路径,请问应该怎么走?根据生活经验,我们会用一种十分贪心的策略,即在 ...

  4. 转载: ubuntu13.04下载android4.0.1源码过程

    转自:http://blog.csdn.net/zhanglongit/article/details/9263009,中间有些不行的地方进行了些小修改. 最初我参考的是老罗的博客http://blo ...

  5. 一文教您如何通过 Java 压缩文件,打包一个 tar.gz Filebeat 采集器包

    欢迎关注笔者的公众号: 小哈学Java, 专注于推送 Java 领域优质干货文章!! 个人网站: https://www.exception.site/essay/create-tar-gz-by-j ...

  6. 「Luogu 1349」广义斐波那契数列

    更好的阅读体验 Portal Portal1: Luogu Description 广义的斐波那契数列是指形如\(an=p \times a_{n-1}+q \times a_{n-2}\)的数列.今 ...

  7. Python实现获取IP代码

    代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2018/5/30 11:05 # @Desc : 获取ip # @File ...

  8. C#/.Net开发入门篇(1)——开发工具安装

    众所周知,工欲善其事必先利其器,要想砍柴快一定得有把好刀,那么要想代码写的有效率.质量高一个趁手的编辑器是必不可少的,写代码不可能就用系统自带的文本编辑器(如果是大佬当我没说),这里我推荐各位使用微软 ...

  9. 从Gartner IT Symposium,看RPA“一半是海水一半是火焰”

    2019年,艺赛旗和Gartner建立了咨询合作,并在企业发展策略中汲取了Gartner的部分建议.今年Gartner在全球召开了多场IT Symposium,并在Symposium发布2020的相关 ...

  10. 【algo&ds】3.栈和队列

    1.堆栈 堆栈(Stack):具有一定操作约束的线性表(只在一端(栈顶,Top)做插入.删除) 先进后出特性 1.1堆栈的抽象数据类型描述 类型名称: 堆栈(Stack) 数据对象集:一个有0个或多个 ...