PHP中的异常处理:$e到哪里去了?

PHP中的异常处理:$e到哪里去了?,php,exception,Php,Exception,我一直在搜索这篇文章,但似乎在代码中遇到了相同的文章: try { //some code } catch(Exception $e){ throw $e; } $e存储在哪里,或者站长是如何看待它的?我应该寻找一个特殊的函数吗?从catch{}块内部抛出的一个(在本例中,$e)将被下一个最高的try{}catch{}块捕获 下面是一个愚蠢的例子: try { try { throw new Exc

我一直在搜索这篇文章,但似乎在代码中遇到了相同的文章:

   try
    {
        //some code

    }
    catch(Exception $e){
        throw $e;
    }
$e存储在哪里,或者站长是如何看待它的?我应该寻找一个特殊的函数吗?

从catch{}块内部抛出的一个(在本例中,$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 />");
}
试试看{
试一试{
抛出新异常(“这是从内部异常处理程序中抛出的。”);
}捕获(例外$e){
扔$e;
}
}捕获(例外$e){
die(“我是外部异常处理程序(“..e->getMessage()”)
); }
上面的输出是

我是外部异常处理程序(这是从内部异常处理程序抛出的)


$e
是从扩展而来的Exception或任何其他类的实例。这些对象有一些共同的特定属性和方法(继承自Exception类),您可以使用它们。有关更多详细信息,请参阅和。

我假设您使用某种第三方代码/库,其中包含此代码,这会将异常抛出到您的代码中。您只需准备好抛出异常以捕获它,然后您就可以按照自己的意愿记录/显示它

try {
  $Library->procedure();
catch(Exception $e) {
  echo $e->getMessage(); //would echo the exception message.
}
有关更多信息,请阅读PHP手册中的条目。

行:

catch(Exception $e){
  throw $e;
}
没有道理。当您捕获到异常时,您应该对异常执行以下操作:

catch(Exception $e){
  error_log($e->getMessage());
  die('An error has occurred');
}
但在您的情况下,异常会直接抛出到已经发生的外部try块。
如果您将代码更改为:

//some code

将创建完全相同的行为。

一件好事是异常实现了_toString()并输出调用堆栈跟踪

所以有时候在我知道的低级异常中,我想看看我是如何做到的,在catch()中,我就是这么做的

error_log($e);

谢谢Mark,请原谅我的生疏,但是我如何检查getMessage以便看到出现了哪些错误?$e->getMessage()只是一个返回带有错误消息的字符串的函数。这里的示例#1()提供了一些关于标准异常对象中可用的方法的好信息。是的!我讨厌看到捕捉到异常并只重新抛出的代码。异常处理没有得到应有的重视,这会导致在大型系统中进行随机错误处理,而不是干净的代码,并且容易诊断问题。谢谢您,文档中没有显示将异常对象传递给error_log()。我想我是在寻找一种渴望这种功能的方式。捕获它,处理它,并用默认的处理程序记录它,在你尝试找到它之前似乎并不难。非常欢迎你。我基本上偶然发现了Exception的
\uu toString()
实现的堆栈跟踪方面,并用它替换了我们正在使用的遗留函数。