2

这是项目中注册的代码:

$mobile = trim($_POST['mobile']);
$code = $_POST['code'];
$password = $_POST['password'];

try {
    if(empty($password)) {
        throw new \Exception('请填写密码');
    }
    if(strlen($password) < 6 || preg_match("/^\d+$/", $password)) {
        throw new \Exception('密码必须大于6位,并且不能是纯数字');
    }
    $mobilecode = new Chkcode;
    if(!$mobilecode->verify($code, 'phone_code_'.$mobile)) {
        throw new \Exception('手机验证码不正确');
    }

    $user = new User();
    if($user->phone_exists($mobile)) {
        throw new \Exception('手机号已注册或绑定');
    }
    $uid = $user->create([
        'phone'=>$mobile,
        'password'=>$user->hash_password($password),
        'create_datetime'=>date('Y-m-d H:i:s')
    ]);
    $ip = $_SERVER['REMOTE_ADDR'];
    $user->log_history($uid, $ip, true);
    $user->set_online($uid);
    return $response->withJson([
        'errcode' => 0
    ]);
} catch (\Exception $e) {
    $msg = $e->getMessage();
    $code = $e->getCode() || 1;
    return $response->withJson([
        'errcode' => $code,
        'msg' => $msg
    ]);
}

之前的phper喜欢用Exception,在最下面统一处理异常
这样倒是挺方便的,流程明了,但是性能和return比应该低了一点吧

Salamander 6.6k
2017-02-04 提问

查看全部 8 个回答

5

已采纳

这里并不需要考虑所谓的性能问题,使用异常处理方式可以实现程序执行完某一块之后而不返回,捕获异常后继续执行下面的代码,而return就只能退出函数了。

抛出异常的时候,不建议直接抛出Exception,而应该使用自定义的异常或者标准库中的异常,尽量做到抛出的异常能够直接反映出出现的问题。

推广链接