zoukankan      html  css  js  c++  java
  • 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

    世界上本没有坑,坑的人多了也就成了坑

  • 相关阅读:
    Web性能优化系列(3):如何延迟加载JS
    Web性能优化系列(2):剖析页面绘制时间
    Web性能优化系列(1):Web性能优化分析
    页面制作之开发调试工具(1)
    格式化 SQL 来提高效率
    关于SQL注入,你应该知道的那些事
    jQuery()方法的第二个参数
    JSON简介以及用法代码汇总
    js简单的面试题
    常用meta整理
  • 原文地址:https://www.cnblogs.com/phpfensi/p/8143363.html
Copyright © 2011-2022 走看看