区分不同的PHP异常

时间:2016-05-31 14:45:45

标签: php exception exception-handling try-catch

我有一些难以阅读的IF / THEN逻辑,我正在考虑使用异常。

代码将测试用户输入,并根据需要抛出异常。我的catch语句将处理预期的异常,但如果没有预料到异常(就像我搞砸了一个PDO语句),我希望抛出异常并让PHP的错误系统处理它。所有预期的例外都以相同的方式处理,我不希望在每次测试中使用多次尝试/捕获。

在catch语句中,如何根据异常执行不同的操作?

try {
    $user_input=$_POST['user_input'];
    // rest of code here...
    if (test1($user_input)) {
        throw new Exception("Anticipated exception 1."); 
    }
    // rest of code here...
    //Some PDO which might generate a non-anticipated exception
    if (test2($user_input)) {
        throw new Exception("Anticipated exception 2."); 
    }
    // rest of code here...
}
catch (Exception $e) {
    if(anticipatedException($e)) {
        //Deal with it
    }
    else {
        throw $e;
    }
}

1 个答案:

答案 0 :(得分:2)

使用不同的例外。即。

class ExceptionOne extends Exception {}
class ExceptionTwo extends Exception {}

try {
    $user_input=$_POST['user_input'];
    // rest of code here...
    if (test1($user_input)) {
        throw new ExceptionOne("Anticipated exception 1."); 
    }
    // rest of code here...
    //Some PDO which might generate a non-anticipated exception  
    if (test2($user_input)) {
        throw new ExceptionTwo("Anticipated exception 2."); 
    }
    // rest of code here...
}
catch (ExceptionOne $e) {
    /*...*/
}
catch (ExceptionTwo $e) {
    /*...*/
}

同时检查可能有助于对您进行分组的预定义例外:http://php.net/manual/en/spl.exceptions.php