PHP empty(0) 返回 1,即 0 也被当成“空”

研究ThinkPHP源码时发现删除记录的 destory 方法中的判断有点绕,学习了下发现还是因为自己读书太少。

先看下面的逻辑:

/**
 * 删除记录
 * @access public
 * @param  mixed $data 主键列表 支持闭包查询条件
 * @return bool
 */
public static function destroy($data)
{
    if (empty($data) && 0 !== $data) {
        return false;
    }
    
    //删除逻辑...
}

原来以为代码应该实现的逻辑是:如果参数 $data 是空,或者是 0,则返回不处理,后来才发现应该是 0 的时候也会执行后面的逻辑。

因为:PHP 中 empty(0) 是返回的 1,也就是说 0 在 PHP 中也被当成空,所以上面代码中的判断是没问题的。

如果 $data 不是 0 的情况是空,则返回 false 不执行删除操作。

最后修改:2019 年 04 月 18 日 09 : 03 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论