【发布时间】:2010-10-31 17:30:45
【问题描述】:
我一直在寻找这个,我似乎只是在这段代码中遇到了相同的文章:
try
{
//some code
}
catch(Exception $e){
throw $e;
}
$e 存储在哪里或网站管理员如何查看它?我应该寻找一个特殊的功能吗?
【问题讨论】:
我一直在寻找这个,我似乎只是在这段代码中遇到了相同的文章:
try
{
//some code
}
catch(Exception $e){
throw $e;
}
$e 存储在哪里或网站管理员如何查看它?我应该寻找一个特殊的功能吗?
【问题讨论】:
从 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 />");
}
上面的输出是
我是外部异常处理程序(这是从内部异常处理程序抛出的。)
【讨论】:
一个好处是 Exception 实现了 __toString() 并输出了一个调用堆栈跟踪。
所以有时在我知道的低级异常中我会想看看我是怎么做到的,在 catch() 中我只是这样做
error_log($e);
【讨论】:
__toString() 实现的堆栈跟踪方面,并用它来替换我们正在使用的旧函数。
$e 是 Exception 或从Exception 扩展的任何其他类的实例。这些对象有一些共同的特定属性和方法(继承自 Exception 类)您可以使用。有关详细信息,请参阅 chapter about exceptions 和 Exception member list。
【讨论】:
我假设您使用某种第三方代码/库,其中包含此代码,这会将异常抛出到您的代码中。您只需准备好抛出异常即可捕获它,然后您可以根据需要记录/显示它。
try {
$Library->procedure();
catch(Exception $e) {
echo $e->getMessage(); //would echo the exception message.
}
如需了解更多信息,请阅读 PHP 手册中Exceptions 上的条目。
【讨论】:
线条:
catch(Exception $e){
throw $e;
}
没有意义。当您捕获异常时,您应该对异常执行以下操作:
catch(Exception $e){
error_log($e->getMessage());
die('An error has occurred');
}
但在您的情况下,异常被直接抛出到已经发生的外部尝试块。
如果您将代码更改为:
//some code
会产生完全相同的行为。
【讨论】: