尝试多次捕获

时间:2014-01-16 09:14:36

标签: php exception try-catch

这是我的代码:

error_reporting(0);

$mysqli=new mysqli("localhost",'root','','alex');
try{
    if($mysqli->connect_errno){
        throw new Exception("Database error!");
    }else{
        $query=$mysqli->query("Select companie,sum(suma) as suma from muncitori group by companie");
        if(!$query){
            throw new LastException("Query failed!");
        }
    }
    while($result=$query->fetch_array()){
        echo "Compania $result[companie] a cheltuit suma $result[suma] lei<br>";
    }
}catch (Exception $e){
    echo $e->getMessage();
}catch (LastException $e){
    echo $e->getMessage();
}
class LastException extends Exception{}

如果我的查询失败并且我抛出异常,则(LastException $ s)catch块不会捕获异常但是(Exception $ e)会捕获它。问题出在哪儿?为什么Exception会捕获LastException的异常?

2 个答案:

答案 0 :(得分:1)

你应该重新排序catch-blocks:从最特定到最一般,例如:

try {
   //...
} catch (LastException $e) {
   //...
} catch (Exception $e) {
   //...
}

要了解的事情:

  • 按顺序处理catch-blocks:从上到下;
  • 将执行第一个匹配的catch-block;

因此,如果先放置} catch (Exception $e),那么它将捕获所有异常,因为Exception是PHP中所有异常的基类。

答案 1 :(得分:0)

反转这两个例外:

} catch (LastException $e) {
    echo $e->getMessage();
} catch (Exception $s) {
    echo $s->getMessage();
}