如何高效规避Division by zero error?现有除零防护写法是否合理?
现有实现合理性判定
你的规避方式完全不合理,属于掩盖报错、但业务逻辑完全错误的处理方案,问题根源如下:
isset()函数仅用于判断变量是否已定义且值不为null,返回值为布尔类型:变量存在返回true,否则返回false- PHP进行数学运算时会自动将布尔值强转为整型:
true转1,false转0 - 你示例代码中的
$count = 0属于已定义的变量,所以isset($count)返回true,实际运行为10 / 1,得到的平均值10和真实业务结果完全不符,这种处理只是消除了报错,实际产出的是错误数据,问题比报错本身更严重。
正确的除零错误规避方案
核心逻辑是做除法运算前先判断除数是否为大于0的有效值,再执行对应分支逻辑,两种常用的高效实现方式:
- 基础条件判断写法,可读性最高,适合需要多分支处理的场景
$ratingNumber = 10; $count = 0; $average = 0; if ($count > 0) { $average = $ratingNumber / $count; } // 业务上如果无人评分,可以直接将$average设为null,前端对应展示「暂无评分」即可
- 三元运算符简写,适合简单的赋值场景
// 写法1:仅处理$count已定义的场景 $average = $count > 0 ? $ratingNumber / $count : 0; // 写法2:PHP7+版本兼容$count未定义的场景 $average = !empty($count) ? $ratingNumber / $count : 0;
内容的提问来源于stack exchange,提问作者cypher
相关产品推荐
相关产品推荐

