PHP 中一个 False 引发的问题,差点让公司损失一百万
时间:2019-08-24
本文章向大家介绍PHP 中一个 False 引发的问题,差点让公司损失一百万,主要包括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 作为一门弱类型语言,可能我们在编写代码时,会比较随性。但是随性带来的风险可能会很高,所以我们在编程的时候,还是应该要注意到很多语言的细节。
原文地址:https://www.cnblogs.com/yxhblogs/p/11406420.html
- Mysql Group Replication介绍
- 剑指offer——快速排序
- 架构高性能网站秘笈(四)——反向代理缓存
- 架构高性能网站秘笈(一)——了解衡量网站性能的指标
- MYSQL5.6&5.7编译安装
- 架构高性能网站秘笈(三)——浏览器缓存
- 剑指 offer代码解析——面试题39判断平衡二叉树(高效方法)
- 跟着柴毛毛学Spring(4)——面向切面编程![这里写图片描述](http://img.blog.csdn.net/20171031111402095)
- MYSQL数据闪回方式
- 剑指 offer代码解析——面试题39判断平衡二叉树
- 跟着柴毛毛学Spring(3)——简化Bean的配置
- 剑指 offer代码解析——面试题39二叉树的深度
- 跟着柴毛毛学Spring(2)——Bean的配置
- C++ 使用STL string 实现的split,trim,replace-修订
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Java的System.exit()详解
- Hadoop伪分布式搭建(hadoop2.x通用)
- R语言tryCatch使用方法:判断Warning和Error
- leetcode1546题解【前缀和+贪心】
- leetcode560题解【前缀和+哈希】
- 5秒解决:VMware Workstation 与 Hyper-V 不兼容
- Java的访问控制符详解(结合代码演示)
- Python贪吃蛇小游戏_完整源码免费分享
- GitHub修改昵称和用户名(图解详细教程)
- Python飞机大战小游戏_完整源码免费分享
- Linux求助命令
- Linux关机命令及步骤
- Java实现二叉树层次遍历:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- Django 用户认证系统使用总结
- 前端综合面试题(9道)