从用户定义的PHP异常处理程序中检测异常类型

时间:2014-03-18 10:02:06

标签: php exception pdo exception-handling

我正在为我的应用程序编写一个用户定义的PHP异常处理程序,并希望它以不同的方式处理不同类型的异常。

例如,如果应用程序抛出未捕获的PDOException,我的处理程序会向我发送一封电子邮件,但如果抛出未捕获的异常,则会执行另一个操作。

目前处理程序如下所示:

function exception_handler($po_exception) {
    // If this is a PDO Exception send an email.
    example_email_function('There was a database problem', $po_exception->getMessage());

    // If this is any other type of Exception, let the user know something has gone wrong.
    echo "Something went wrong.\n"; 
}

2 个答案:

答案 0 :(得分:1)

http://www.php.net/manual/en/language.operators.type.php

但是,我建议不要采取这种粗心行为。

如果您想监控您的网站是否正常运行,请使用一些外部服务。

对于所有偶然的错误,只需监控错误日志。

另外,不要使用getMessage(),而应使用$ po_exception本身。

答案 1 :(得分:0)

要确认,回答我的问题的解决方案位于@YourCommonSense提供的链接中:http://www.php.net/manual/en/language.operators.type.php,结果代码为:

function exception_handler($po_exception) {
    if ($po_exception instanceof PDOException) {
        // If this is a PDO Exception, pass it to the SQL error handler.
        example_email_function('There was a database problem', $po_exception->getMessage());
    }
    else {
        // Do non database Exception handling here.
    }

    // If this is any other type of Exception, let the user know something has gone wrong.
    echo "Something went wrong.\n";
}