0

mysql データベースにアクセスするための多くの関数を持つクラスがあり、このクラス内には、使用する多くのメソッドがあるとしましょう。

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

現在、同じ例外を適用するメソッドが 10 個近くあるため、同じプロセスを何度も繰り返すのではなく、すべてのメソッドに対して 1 回だけ実行する方法が他にあるかどうかを知りたいと思います。

私は明らかに、クラスをインスタンス化するときにこれを行うことができます。

お気に入り

$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 コードを単一の関数に移動し、その中にキャッチを入れることは、おそらくはるかに良い答えです!

于 2013-10-03T18:35:29.120 に答える