2012-02-26 8 views
1

クラス内でメソッドが呼び出されるたびにPHPでスニペットを実行する方法があるかどうかを知りたいと思います。 __construct()の動作と同様ですが、すべてのメソッド呼び出しで呼び出される必要があります。php - メソッド呼び出しでスニペットを実行

+1

なぜですか?これが必要な場合は、デザインが悪いように聞こえます。 –

答えて

2

あなたはおそらく__call()を探しています。これは、アクセス不可能なメソッドが呼び出されるたびに呼び出されます。

class MyClass { 
    protected function doStuff() { 
    echo "doing stuff."; 
    } 

    public function __call($methodName, $params) { 
    echo "In before method."; 
    return $this->doStuff(); 
    } 
} 

$class = new MyClass(); 
$class->doStuff(); // In before method.doing stuff. 
+0

問題は、この関数を既存のメソッドで呼び出すようにしたいということです。 – Paris

+0

PHPですでにアクセス可能な場合は、メソッド呼び出しをインターセプトできません。これを可能にし、扱いやすいようにするためのデザインパターンとテクニックがたくさんありますが、その方法はいずれかの方法でアクセスできないようにすることから始まります。あなたは '$ myClass-> callMethod( 'methodName'、array( 'args'))'のようなものに入ることができますが、それは非常に貧しい解決策のようです。 –

+0

ニース。だから私は私にはアクセスできないメソッドを作る(私はそれのための最善の方法を見つけるだろう。私は私の心の中に2つの異なる方法がある)と私はコールを使用します。ニース。どうもありがとうございました :-) – Paris

0

あなたのニーズに合わせてアスペクト指向のライブラリを使用することをお勧めします。メソッド(正規表現)のポイントカットを作成し、各メソッドの前または後に呼び出すためのアドバイス(クロージャ)を作成することができます。 私のライブラリーをご覧になれます:Go! AOP PHP

関連する問題