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

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

一、场景描述#

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

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

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

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

1、' ' 空字符串

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

2、0 整数零

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

3、0.0 浮点数零

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

4、"0" 字符串零

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

5、null

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

6、false

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

7、array() 空数组

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

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

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

三、思考#

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

posted @   Yxh_blogs  阅读(369)  评论(1编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示
CONTENTS