2012-04-13 63 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

相关问题