这里不描述具体业务,假设有个产品,状态分为禁用和可用,现在有个需求,分为三个任务,一个任务获取可用的产品,一个任务获取禁用的产品,一个任务获取所有的产品。
然后我们的开发是这样设计的,如下:
/**
* 获取产品
*
* @param $status 状态 0|1|all传all时统计所有的状态
*
* @return \PDOStatement
*/
public function getProduct($status)
{
if($status != 'all'){
$where['status'] = $status;
}
$data = [
'where' => $where,
'fields' => 'id, name, status',
'order' =>'id desc',
'limit' =>10
];
$products = (new ProductModel())->getAllItems($data);
return $products;
}
真实的业务场景可能不仅仅是这么简单,没有细心测试可能也很难发现这个BUG。
当$status=0时,执行var_dump($status != 'all');
,你会发现结果是true,所以就触发了这个BUG,实际上要获取禁用的产品的时候,变成了获取所有的产品。
类似场景还有很多,一步小心,带来的BUG可能是致命的,希望大家能热爱生活,敬畏每一行代码!