2012-04-13 30 views

答えて

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

これは完璧です、ありがとう:) – ubugnu

0

なぜこれが必要ですか?メソッドを作成して、最初に持っていた各メソッドで呼び出すことができます。

編集: あなたが探しているものは、アスペクト指向プログラミングのようなものです。 Googleでのクイック検索は、こちらをご覧ください: http://code.google.com/p/apdt/

多分役立ちます。

+0

省スペース: – ubugnu

+0

投稿を編集しました。おそらくそれは助ける:) – kufi

+0

クーフィーそれはAOPが私が必要なものだと思われるが、私の小さなプロジェクトのために私はtroelsknのソリューションが十分だと思う – ubugnu

0

あなたは彼らの前に_を使用してメソッドの名前を変更することはできますか?すべてのコールは__call/__callStatic経由でルーティングされますか?

+0

これは動作しません! – ubugnu

関連する問題