PDOException类是否继承了Exception类?

时间:2016-10-19 12:28:51

标签: php database pdo transactions

我正在写一个pdo php事务代码,我一直在编写catch部分:

try{
        $this->db->beginTransaction();
        //Some transaction code
        $this->db->endTransaction();
    } catch(Exception $e){
        $this->db->cancelTransaction();
    } catch (PDOException $e){
        $this->db->cancelTransaction();
    }

代码效果很好,但我觉得这不符合逻辑。仅仅使用catch(Exception $ e)并删除catch(PDOException $ e)部分就足够了吗? PDOException类是否继承了Exception类?

2 个答案:

答案 0 :(得分:1)

是的,它继承了。是的,这不符合逻辑。是的,只使用catch(Exception $ e)

就足够了

答案 1 :(得分:0)

PDOException扩展RuntimeException,扩展Exception。所以你的代码不符合逻辑,第二次捕获永远不会工作。只需使用catch(Exception $e)即可。但是如果你想要不同的处理方式,你需要采取以下方式

<?php
    try {
      $this->db->beginTransaction();
      //Some transaction code
      $this->db->endTransaction();

    } catch (PDOException $e) {
      echo "DataBase Error:".$e->getMessage();
    } catch (Exception $e) {
      echo "General Error".$e->getMessage();
    }
    ?>