php - 嵌套的 try catch 在 PHP 中

标签 php nested try-catch

考虑:

try{
    class MyException extends Exception{}
    try{
        throw new MyException;
    }
    catch(Exception $e){
        echo "1:";
        throw $e;
    }
    catch(MyException $e){
        echo "2:";
        throw $e;
    }
}
catch(Exception $e){
    echo get_class($e);
}

我对这个 try and catch 很困惑。由于第二个 try throw MyException,我期待 2:MyException 结果。但实际结果是1:MyException。什么解释?

最佳答案

MyException extends Exception,所以ExceptionMyException更通用,第一个catch block 将捕获它。如果你想捕获 MyException,你需要颠倒 catch block 的顺序:

class MyException extends Exception{}

try {
 try {
   throw new MyException;
 } catch(MyException $e){
   echo "2:";
   throw $e;
 } catch(Exception $e){
   echo "1:";
   throw $e;
 }
}catch(Exception $e){
echo get_class($e);
}

关于php - 嵌套的 try catch 在 PHP 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203928/

相关文章:

javascript - 在 Google 脚本中尝试/捕获 HTTP 响应的最佳方式

SQL - 在嵌套选择中使用值

arrays - 在 ArangoDB 中查询嵌套数组

使用嵌套过滤器的 ElasticSearch 查询不起作用

java - 长时间尝试语句

java - IOException 未捕获

php - 如何从对象中获取 "any"mongodb 结果键

php - 需要一个脚本来传输最新的 MySQL 字段条目

php - 如何在java脚本onclick标识符中安全地回显php字符串

php - 密码保护 PHP 页面,为下一页设置用户并仍然检查密码