2012-04-13 120 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 2012-04-13 18:22:06

0

爲什麼你需要這個?你可以創建一個方法,並在你開始的每種方法中調用它。

編輯: 你所搜索的是一樣的東西在PHP面向方面編程。 谷歌快速搜索發現這裏: http://code.google.com/p/apdt/

也許它有幫助。

+0

節省空間:) – ubugnu 2012-04-13 17:51:58

+0

編輯帖子。也許它有幫助:) – kufi 2012-04-13 17:55:25

+0

謝謝庫菲似乎AOP是我需要的,但對於我的小項目,我認爲troelskn的解決方案已足夠 – ubugnu 2012-04-13 18:21:47

0

你能在他們面前的一個重命名_你的方法是什麼?那麼所有的呼叫都將通過__call/__callStatic路由?

+0

這不行! – ubugnu 2012-04-13 18:11:39

相關問題