理解PHP的异常流程

时间:2015-10-10 11:46:19

标签: php exception-handling

我正在浏览Exception类的PHP文档,我对OOP PHP很新,因此使用PHP预定义和SPL类进行异常处理。

在进行中时,我无法获得其中列出的示例的执行流程。

<?php

class MyCustomException extends Exception {}

function doStuff() {
    try {
       throw new InvalidArgumentException("You are doing it wrong!", 112);
   } catch(Exception $e) {
    throw new MyCustomException("Something happened", 911, $e);
    }
}


try {
    doStuff();
} catch(Exception $e) {
 do {
    printf("%s:%d %s (%d) [%s]\n", $e->getFile(), $e->getLine(), $e->getMessage(), $e-   >getCode(), get_class($e));
   } while($e = $e->getPrevious());
 }
   ?>

这是我迄今为止的理解。

  1. 解析器解释函数并为其分配内存。
  2. 它进入try块并执行dostuff();
  3. 在此之后发生了什么...以及如何按照下面显示的顺序输出结果对我来说并不清楚,即MyCustomException首先出现。
  4. /home/bjori/ex.php:8 Something happened (911) [MyCustomException] /home/bjori/ex.php:6 You are doing it wrong! (112) [InvalidArgumentException]

    任何人都可以了解它!非常感谢 !

1 个答案:

答案 0 :(得分:0)

doStuff(); 中首先抛出一个 InvalidArgumentException (第一个异常),并在 doStuff(); 中捕获你再次抛出它作为 MyCustomException (第二个例外)。因此,在外部try和catch块中,最后抛出的异常是 MyCustomException ,因此上一个异常是 InvalidArgumentException < / strong>即可。

http://php.net/manual/en/exception.getprevious.php

  

返回上一个Exception(Exception :: __ construct()的第三个参数)。

希望有所帮助。