php 用Exception?大家都是这么写的吗?

这是项目中注册的代码:

$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比应该低了一点吧

阅读 5.1k
8 个回答

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

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

没问题好吧,最好的方法,自己定义一个异常,在全局判断处理这个异常,就不必要每次都这样写了

try catch 不是这么玩的吧,自己throw自己抓?一般都是catch 底层代码抛出的异常,在应用层捕获进行处理。

而且一次不要 catch 过多,只在预计会抛出异常的地方 catch,否则语意不明确,调试也不方便。

只是符合面相对象的设计原则么~

除了直接抛Exception不太好之外,没啥毛病吧。。。
最好是自定义一个异常类。
不然这样,不是注册输入错误的其他异常,也给一起catch了

至于性能,你怎么不关心一下js性能。。

验证的话我是采用直接return出来。一般异步就直接exit了,像如果要走dao层,有事物相关的话我才用那种方式接收异常,然后把异常写进日志的, 验证的我首先定义了一个validateHelper.php 类,然后引用的是valitron这个类库。我自己又稍微加了几条,自用valitron,反正就是不通过就exit了,这样会不会很2 啊..

网站这东西受io制约比较严重,语言性能反而是次要的。

谢邀,一般我是定义一个方法 把获取到的异常参数传入我定义的方法,然后在前端页面进行展示 ,别的没什么。

推荐问题
宣传栏