PHP中的异常处理:$ e在哪里?

时间:2009-06-05 17:56:18

标签: php exception

我一直在寻找这个,我似乎只是遇到了相同的文章,在这段代码中:

   try
    {
        //some code

    }
    catch(Exception $e){
        throw $e;
    }

$ e存储在哪里或网站管理员如何看待它?我应该寻找一个特殊功能吗?

5 个答案:

答案 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 exceptionsException 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

会创建完全相同的行为。