0

try-catch我的php 应用程序中有一个块,如下所示:

try {
  if ($userForgotToEnterField) {
     throw new Exception('You need to fill in your name!');
  }
  ...
  doDifferentThingsThatCanThrowExceptions();
  ...
} catch (ExpectedException $e) {
  $template->setError('A database error occured.');
} catch (Exception $e) {
  $template->setError($e->getMessage());
}

我只想输出$e->getMessage()我手动抛出的带有自定义错误文本的异常,而不是其他代码抛出的异常,因为这些可能包含用户不应该看到的敏感信息或非常技术性的信息。

是否可以在不使用自定义异常类的情况下区分手动抛出的异常和某些方法抛出的随机异常?

4

2 回答 2

1

我同意最好只写你自己的例外。如果出于某种原因您不想这样做,您可以设置自定义错误消息和自定义错误代码(Exception 构造函数的第二个参数。)如果错误代码是您的,请检查每个抛出的异常,并仅显示那些:

public Exception::__construct() ([ string $message = "" [,整数 $ 代码 = 0[, Exception $previous = NULL ]]] )

然后使用getCode

于 2013-05-29T19:12:00.653 回答
0

我已经考虑过这一点,我会说你正在做的事情确实需要一个自定义异常类。如果你想绕过它(这最终会更令人困惑),你基本上会创建一个所有异常都可以修改的全局(或相同范围)变量,并在你的 throw 块中标记它。

$threwCustomException = false;

try {
  if ($userForgotToEnterField) {
     throw new Exception('You need to fill in your name!');
     $threwCustomException = true;
  }
  ...
  doDifferentThingsThatCanThrowExceptions();
  ...
} catch (ExpectedException $e) {
  $template->setError('A database error occured.');
} catch (Exception $e) {
    if($threwCustomException){
        //Whatever custom exception handling you wanted here....
    }
  $template->setError($e->getMessage());
}

这是我能想到的最好的了。然而,这是一个坏主意,这就是允许您创建自己的异常类的全部原因。我知道您不是在寻找这个答案,但是由于您看起来像是在尝试不创建大量额外代码,因此我只需将 Exception 扩展为“CustomException”或特定于您的项目的其他名称,然后抛出对于所有情况,并以这种方式处理。希望有帮助。

于 2013-05-29T19:01:10.373 回答