我一直在寻找这个,我似乎只是遇到了相同的文章,在这段代码中:
try
{
//some code
}
catch(Exception $e){
throw $e;
}
$ e存储在哪里或网站管理员如何看待它?我应该寻找一个特殊功能吗?
答案 0 :(得分:7)
从catch {}块内部抛出的Exception object(在本例中为$ e)将被下一个最高的try {} catch {}块捕获。
这是一个愚蠢的例子:
try {
try {
throw new Exception("This is thrown from the inner exception handler.");
}catch(Exception $e) {
throw $e;
}
}catch(Exception $e) {
die("I'm the outer exception handler (" . $e->getMessage() . ")<br />");
}
以上的输出是
我是外部异常处理程序(这是从内部异常处理程序抛出的。)
答案 1 :(得分:5)
一个好处是Exception实现了__toString()并输出了一个调用堆栈跟踪。
所以有时在低级别的例外情况下,我知道我会想看看我是怎么做的,在catch()中我只是做
error_log($e);
答案 2 :(得分:1)
$e
是 Exception 的实例或从Exception扩展的任何其他类。这些对象具有一些可以使用的特定属性和方法(继承自 Exception 类)。有关详细信息,请参阅chapter about exceptions和Exception member list。
答案 3 :(得分:1)
我假设您使用某种类型的第三方代码/库,其中包含此代码,这会将异常抛入您的代码中。您只需准备好抛出异常即可捕获它,然后您可以根据需要记录/显示它。
try {
$Library->procedure();
catch(Exception $e) {
echo $e->getMessage(); //would echo the exception message.
}
有关更多信息,请阅读Exceptions上的PHP手册。
答案 4 :(得分:1)
行:
catch(Exception $e){
throw $e;
}
没有意义。当你捕获异常时,你会想要做一些例外的事情:
catch(Exception $e){
error_log($e->getMessage());
die('An error has occurred');
}
但是在你的情况下,Exception会被直接抛到一个已经发生的外部try-block 如果您将代码更改为:
//some code
会创建完全相同的行为。