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

时间:2013-10-03 18:18:04

标签: php class oop exception-handling pdo

可以说,我有一个具有许多函数的类来访问mysql数据库,在这个类中,有很多方法可以使用

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

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

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

喜欢

$Object = new foo();

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

但是,这不是我想要的。

如果还有其他聪明的方法可以做到这一点,那将会很高兴知道。

1 个答案:

答案 0 :(得分:2)

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

这样的事情可能是:

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代码移动到一个函数中并将catch放入其中可能是一个更好的答案!