欧阳简之 > 分享一个 != 的BUG

热爱代码,对每一行代码保持一颗敬畏之心。

这里不描述具体业务,假设有个产品,状态分为禁用和可用,现在有个需求,分为三个任务,一个任务获取可用的产品,一个任务获取禁用的产品,一个任务获取所有的产品。

然后我们的开发是这样设计的,如下:

/**
 * 获取产品
 *
 * @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可能是致命的,希望大家能热爱生活,敬畏每一行代码!

tagged by none