这是项目中注册的代码:
$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比应该低了一点吧
这里并不需要考虑所谓的性能问题,使用异常处理方式可以实现程序执行完某一块之后而不返回,捕获异常后继续执行下面的代码,而
return
就只能退出函数了。抛出异常的时候,不建议直接抛出
Exception
,而应该使用自定义的异常或者标准库中的异常,尽量做到抛出的异常能够直接反映出出现的问题。