PHPには別のメソッドが呼び出されるたびに呼び出されるマジックメソッドがありますか? __callStatic()メソッドと__call()マジックメソッドは、メソッドが存在しない場合にのみ機能するようです。PHP:メソッドが呼び出されるたびに実行されるマジックメソッド
2
A
答えて
3
いいえあなたが求めているのは、"advice"またはaspect oriented programmingです。 PHPでこれを可能にするいくつかの実験的な拡張があると思いますが、実稼働環境で使用したいことは何もありません。
あなたができることは、__call
経由ですべての呼び出しを委任するラッパーを作成することです。例えば:
class Foo {
function bar() {
echo "Foo::bar\n";
}
}
class AdviceWrapper {
protected $subject;
function __construct($subject) {
$this->subject = $subject;
}
function __call($name, $args) {
echo "Before $name\n";
$result = call_user_func_array(array($this->subject, $name), $args);
echo "After $name\n";
return $result;
}
}
$foo = new AdviceWrapper(new Foo());
$foo->bar();
も参照してください:https://stackoverflow.com/questions/4738282/are-there-any-working-aspect-oriented-php-libraries
0
なぜこれが必要ですか?メソッドを作成して、最初に持っていた各メソッドで呼び出すことができます。
編集: あなたが探しているものは、アスペクト指向プログラミングのようなものです。 Googleでのクイック検索は、こちらをご覧ください: http://code.google.com/p/apdt/
多分役立ちます。
0
あなたは彼らの前に_を使用してメソッドの名前を変更することはできますか?すべてのコールは__call/__callStatic経由でルーティングされますか?
+0
これは動作しません! – ubugnu
関連する問題
- 1. 呼び出されたメソッドの前に実行されるトースト
- 2. 呼び出されるたびにPHP関数が実行されますか?
- 3. mysql_queryが呼び出されるたびに関数を実行します。 (PHP)
- 4. PHPunitメソッドが1回呼び出されると予想され、実際に0回呼び出されます
- 5. 呼び出された関数が実行される前にコードを実行
- 6. メソッド呼び出し後にRubyコードが実行されない
- 7. Funcで実行される呼び出されたメソッドの名前の取得
- 8. 単体テスト中にメソッド呼び出しが試行されたが、実際には呼び出していないが、実際には呼び出さない
- 9. 呼び出される前に実行されるコールバック
- 10. 他のメソッドが呼び出されたときにPythonクラスが実行されるメソッド
- 11. 実行メソッドが呼び出されないスレッド
- 12. 実行時に呼び出されない印刷メソッドは、デバッグ時に呼び出されます
- 13. clearTimeoutが呼び出された後にsetIntervalが実行され続ける
- 14. ファーストファンクションが最初に実行された後に呼び出される関数
- 15. 呼び出されたディレクトリ内で実行するバッチファイルを呼び出す
- 16. メソッドが呼び出されたときにCurret日付がアングルで呼び出される
- 17. メソッドが呼び出された行に例外がスローされます
- 18. PHPクラス:メソッド呼び出しが行われるたびに特定の関数を呼び出す
- 19. System.Timers.Timer timer.Stop()が呼び出された後に実行される経過イベント
- 20. Thread.MemoryBarrier()が呼び出されるたびにカスタムコードを実行できますか?
- 21. アプリケーションがバックグラウンドから呼び出されたときにメソッドを呼び出す
- 22. Ios:Delegeteメソッドが呼び出されない
- 23. UICollectionViewLayoutメソッドが呼び出されない
- 24. メソッドonHandleIntent()が呼び出されない
- 25. CellForRowAtIndexメソッドが呼び出されない
- 26. メソッドが呼び出された後、呼び出されたPythonモックメソッドは "False"である
- 27. Roslyn - 呼び出されたメソッドが呼び出されたかどうかを調べる
- 28. 呼び出されたときにのみメソッドを実行する方法は?
- 29. どのオーバーロードされたメソッドが呼び出されますか?
- 30. textFieldShouldBeginEditingが呼び出され、textFieldDidBeginEditingが呼び出されない
これは完璧です、ありがとう:) – ubugnu