PHP - 将所有错误转换为异常 - 好还是坏?

时间:2009-06-10 16:09:12

标签: php exception exception-handling error-handling

我想知道将所有PHP错误全局转换为异常是否被视为不良做法。将使用以下内容:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    return false;
}

我认为假设您可以开始在通常会抛出错误的某些代码片段周围使用“try / catch”。

如果不是好/坏的情况,那么这种做法会产生什么样的问题呢?

3 个答案:

答案 0 :(得分:8)

不幸的是,这不会对致命/解析/等起作用。错误...

不记得确切,但我已经尝试过这种情况,并且在某些情况下得到了一条消息,例如“不能在没有解决方法的情况下抛出异常......”但是我不记得获得此结果的条件。但现在我用这种方式完全满意。

答案 1 :(得分:2)

对真正无法控制的事物使用例外。

不可

try {
   if (fopen('file.txt', 'w') === false) {
      throw new Exception('File could not be opened for write access.');
   }
} catch (Exception $e) {
   echo $e->getMessage();
}

<强>为:

try {
   if (strlen($_POST['username']) < 5) {
      throw new Exception('Username too short');
   }
} catch (Exception $e) {
   echo $e->getMessage();
}

第一种方法是好的,因为它发生在用户或应用程序无法控制的东西时。它无法打开文件,因为?可能有很多原因。

第二种方法是当你应该使用trigger_error时,尝试使用try / catch。第二种方式是用户不知道用户名验证的规则。

简而言之,当您无法控制测试内容时会使用异常。记住异常有更多的开销,然后是trigger_error:)

答案 2 :(得分:1)

在过去的Java / .Net工作多年,现在已经在PHP工作了很多年,拥有所有这些不同的错误约定真的很烦人,而Exceptions Pattern对所有事情都非常好 - 从应用程序级错误开始,类错误,系统错误 - 任何事情。

我在尝试管理所有类型的错误类型时投入了大量的工作,因为每个库/函数都以不同的方式处理错误。