异常流理解PHP

异常流理解PHP,php,exception-handling,Php,Exception Handling,我正在浏览异常类的PHP文档,我对OOP PHP非常陌生,因此对PHP预定义类和SPL类的异常处理也非常陌生 在运行过程中,我很难获得这里列出的示例的执行流 <?php class MyCustomException extends Exception {} function doStuff() { try { throw new InvalidArgumentException("You are doing it wrong!", 112); } catc

我正在浏览异常类的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());
 }
   ?>

这是我到目前为止的理解

  • 解析器解释函数并为其分配内存
  • 它进入try块并执行dostuff()
  • 接下来是什么…以及输出结果如何符合如下所示的顺序,我并不清楚,即MyCustomException首先出现
    /home/bjori/ex.php:8发生了什么事(911)[MyCustomException]
    /home/bjori/ex.php:6你做错了!(112)[无效辩论例外]

    任何人都可以解释一下!非常感谢

    IndoStuff()您首先抛出一个InvalidArgumentException(第一个异常),该异常被捕获在doStuff()中然后再次将其作为MyCustomException(第二个异常)抛出。因此,在外部try-and-catch块中,最后一次抛出的异常是MyCustomException,因此,先前的异常是/曾经是InvalidArgumentException

    返回上一个异常(异常的第三个参数::\构造()

    希望能有所帮助。

    doStuff()中您首先抛出一个InvalidArgumentException(第一个异常),该异常被捕获在doStuff()中然后再次将其作为MyCustomException(第二个异常)抛出。因此,在外部try-and-catch块中,最后一次抛出的异常是MyCustomException,因此,先前的异常是/曾经是InvalidArgumentException

    返回上一个异常(异常的第三个参数::\构造()


    希望这能有所帮助。

    您捕获到一个异常,它会停止其传播。然后抛出另一个异常(一个异常链接到另一个异常的事实是不相关的),该异常从此开始传播。您希望发生什么?您捕获了一个异常,它会停止其传播。然后抛出另一个异常(一个异常链接到另一个异常的事实是不相关的),该异常从此开始传播。你以为会发生什么?