0

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

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

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

显然,我可以在实例化类时这样做,

喜欢

$Object = new foo();

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

但是,这不是我要找的。

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

4

1 回答 1

2

我确信有数百万个性能原因不这样做,但从理论上讲,至少你可以通过将它们设为私有来隐藏所有方法,然后使用重载__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 代码移动到一个函数中,然后将 catch 放入其中可能是一个更好的答案!

于 2013-10-03T18:35:29.120 回答