异常-用于用户通知或错误记录


Exceptions - for user notifications or error logging?

我想弄清楚应该使用什么异常;记录应用程序错误,或者显示用户错误,如果两者都有,我应该如何区分和处理用户错误(例如登录失败)和应用程序错误(例如连接数据库失败)的异常。

例如,假设用户尝试登录,但失败(用户错误):

if(!$user->login($_POST)) {
    //$user->login() throws an Exception, throw new Exception("failed login"), on fail.
    catch(Exception $e) {
      print $e->getMessage();
    }
}

或者可能发生数据库错误(错误记录):

public function query($query) {
$this->resource = mysql_query($query) or throw new Exception("Database error:" . mysql_error());
}

如果有的话,上面两个例子中哪一个是合适的用例?

异常是用于在你的程序的一部分上发出异常行为信号。在正常操作期间,程序应该通常不会抛出异常。像登录失败这样的事情是登录机制的正常结果,而不是异常。

[登录失败可能是用户端的异常(如果用户有理由期望登录无条件地工作)!)

典型的异常情况包括内存不足、磁盘空间不足、数据库连接错误或读写文件错误。所有这些都是您通常期望工作的事情,因此这里的错误是一个异常条件。