zoukankan      html  css  js  c++  java
  • PHP 中一个 False 引发的问题,差点让公司损失一百万

    PHP 中一个 False 引发的问题,差点让公司损失一百万

    一、场景描述

    上周我一个在金融公司的同学,他在线上写一个 Bug,差点造成公司损失百万。幸好他及时发现了这个问题并修复了。这是一个由 PHP 中的 empty 引发的问题。他使用 empty 函数判断值为 False 的参数。按照他的正常逻辑理解,下面这段代码会输出 Yes。但是,结果却是相反的。

    $arr['is_default'] = false;
    
    if (!empty($arr['is_default'])) {
        echo "Yes";
    }
    

    虽然,这个 Bug 引发的问题,得到了及时解决。但是,如果发布到生产环境了,可能会造成比较大的损失。因此,这也体现了我们在编程当中,要注意很多的细节,以免发布到生产环境之后造成不可挽回的损失。

    二、列举 PHP 中 empty 函数会返回 False 的情况

    1、' ' 空字符串

    $arr['is_default'] = "";
    
    if (empty($arr['is_default'])) {
        echo "Yes";
    } else {
    	echo  "No";
    }
    

    2、0 整数零

    $arr['is_default'] = 0;
    
    if (empty($arr['is_default'])) {
        echo "Yes";
    } else {
    	echo  "No";
    }
    
    // 输出
    Yes
    

    3、0.0 浮点数零

    
    $arr['is_default'] = 0.0;
    
    if (empty($arr['is_default'])) {
        echo "Yes";
    } else {
    	echo  "No";
    }
    
    // 输出
    Yes
    

    4、"0" 字符串零

    arr['is_default'] = "0";
    
    if (empty($arr['is_default'])) {
        echo "Yes";
    } else {
    	echo  "No";
    }
    
    // 输出
    Yes
    

    5、null

    $arr['is_default'] = null;
    
    if (empty($arr['is_default'])) {
        echo "Yes";
    } else {
    	echo  "No";
    }
    
    // 输出
    Yes
    

    6、false

    $arr['is_default'] = false;
    
    if (empty($arr['is_default'])) {
        echo "Yes";
    } else {
    	echo  "No";
    }
    
    // 输出
    Yes
    

    7、array() 空数组

    $arr['is_default'] = [];
    
    if (empty($arr['is_default'])) {
        echo "Yes";
    } else {
    	echo  "No";
    }
    
    // 输出
    Yes
    

    8、$var 一个声明并未赋值的变量

    $var;
    $arr['is_default'] = $var;
    
    if (empty($arr['is_default'])) {
        echo "Yes";
    } else {
    	echo  "No";
    }
    
    // 输出
    Yes
    

    三、思考

    PHP 作为一门弱类型语言,可能我们在编写代码时,会比较随性。但是随性带来的风险可能会很高,所以我们在编程的时候,还是应该要注意到很多语言的细节。

  • 相关阅读:
    tabsGif
    this.$refs.tabs.activeKey ref就是vue里面的id
    @click.native 会触发原生 click事件 vue
    Web Server Notifier 是chrome网上商店的一个插件
    autoOpenBrowser: true, 运行npm后自动打开浏览器
    总结vue2.0 配置的实例方法
    chrome 打开上次关闭的tab ctrl+shift+T
    动态菜单路由
    gitee 如何创建仓库 及发布
    小白接口
  • 原文地址:https://www.cnblogs.com/yxhblogs/p/11406420.html
Copyright © 2011-2022 走看看