如何将PDO包装起来,尝试将异常处理程序捕获到多个类中


How to wrap PDO try catch exception handlers into multiple classes

假设,我有一个具有许多函数来访问mysql数据库的类,并且在该类中,有许多方法使用

function one(){
    try{
      ...
    }catch(PDOException $e){
       return $e->getMessage()
    }
}

现在,由于我有近 10 种方法应用相同的异常,我想知道是否有任何其他方法可以对所有方法只执行一次,而不是一遍又一遍地重复相同的过程。

显然,我可以在实例化类时执行此操作,

喜欢

$Object = new foo();
try{
    echo $Object->methodFoo(); 
}catch(PDOException $e){
       return $e->getMessage()
}

但是,这不是我想要的。

如果有任何其他聪明的方法可以做到这一点,那就太好了。

我敢肯定有数百万个性能原因不这样做,但理论上至少你可以通过将它们设为私有来隐藏所有方法,然后使用重载__call()调用它们与其中的try { } catch { }块。

像这样的东西可能是:

class TheClass
{
    public function __call($name, $arguments) {
        $result= null;
        try {
            $result= $this->$name($arguments);
        }
        catch (Exception $ex) {
            echo "Ooops: ".$ex->getMessage();
        }
        return $result;
    }
    private function one() {
        return 'hello';
    }
    private function two() {
        // Intentional error
        throw new Exception('Don''t call two!');
    }
}
$foo= new TheClass();
echo $foo->one();
echo $foo->two();

编辑 查看 hendr1x 的建议 - 将所有实际的 PDO 代码移动到一个函数中并放入其中可能是一个更好的答案!