我有一些难以阅读的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;
}
}
答案 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