PHP无法捕获异常抛出的异常

时间:2016-06-25 00:27:32

标签: php exception pdo

我已经将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 {
    //
}

1 个答案:

答案 0 :(得分:2)

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 {
    //
}
相关问题