【问题标题】:PHP unable to caught exception thrown inside catchPHP无法捕获catch内抛出的异常
【发布时间】:2016-10-27 16:30:54
【问题描述】:

我已经将Exception 类扩展了两次以捕获不同类型的异常。当第一个异常被捕获时,我会检查另一个错误,如果有错误,我会再次抛出一个新异常。 问题是我无法捕捉到第二个异常。

class FIRST extends Exception {}
class SECOND extends Exception {}

try {
    throw new FIRST("FIRST", 1);
} catch(FIRST $e) {
    //caught

    if(sth) {
        echo 'ok'; //printed
        throw new SECOND("SECOND", 1);
        echo 'ok'; //never printed
    }
}

catch(SECOND $e) {
    //not caught
}

catch(PDOException $e) {
    //caught
}

finally {
    //
}

【问题讨论】:

    标签: php exception pdo


    【解决方案1】:

    catch 块仅捕获来自 try 块的异常。

    如果您需要捕获任何catch 块引发的异常,您必须将内部代码包装在另一个try-catch 结构中:

    try {
        throw new FIRST("FIRST", 1);
    } catch(FIRST $e) {
        //caught
    
        try {
            if(sth) {
                echo 'ok'; //printed
                throw new SECOND("SECOND", 1);
                echo 'ok'; //never printed
            }
        } catch (SECOND $e) {
            //caught
        }
    }
    
    catch(SECOND $e) {
        //not caught
    }
    
    catch(PDOException $e) {
        //caught
    }
    
    finally {
        //
    }
    

    【讨论】:

    • 这是唯一的方法吗?我不想将它们相互嵌套。
    • stackoverflow.com/questions/8439581/… 我想做第一个答案的事情。
    • 如果你从一个 catch 块中抛出额外的异常,它不会被其他异常捕获。这就是try-catch 的工作原理。您链接到的答案不起作用。
    猜你喜欢
    • 2014-03-22
    • 2011-02-09
    • 2021-09-02
    • 2011-04-05
    • 2015-09-23
    • 2013-08-02
    • 2018-05-30
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多