为自定义错误抛出什么类型的异常?

What type of exception to throw for custom errors?

我有以下脚本。

根据 http://php.net/manual/en/class.pdoexception.php,您不应从自己的代码中抛出 PDOException。

但我希望执行相同的捕获,无论是 PDOException 还是我为无效 foo 抛出的异常。

我也被告知我永远不应该捕获一般异常,而应该只捕获特定异常。

应该如何实施?

 try {
    db::db()->beginTransaction();

    //Do a bunch of queries, and a PDO exception will be thrown upon error

    if($foo($bar)) {throw new Exception('Invalid foo.');}

    db::db()->commit();
} catch (PDOException $e) {
    db::db()->rollBack();
    //Maybe do some other stuff
}

类似

try {
    db::db()->beginTransaction();

    //Do a bunch of queries, and a PDO exception will be thrown upon error

    if($foo($bar)) {throw new RuntimeException('Invalid foo.');}

    db::db()->commit();
} catch (PDOException $e) {
    db::db()->rollBack();
    //Maybe do some other stuff
} catch (RuntimeException $e) {
    //foo invalid
}