2

PHP中是否有一个神奇的方法,每次调用另一个方法时都会调用它?__callStatic() 和 __call() 魔术方法似乎仅在该方法不存在时才起作用。

4

3 回答 3

5

不,您要求的是“建议”面向方面的编程。我相信有一些实验性的扩展可以在 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

于 2012-04-13T17:51:54.607 回答
0

你为什么需要这个?您可以只创建一个方法并在开始时在每个方法中调用它。

编辑:您搜索的内容类似于 php 中的面向方面编程。在谷歌上快速搜索发现这里: http ://code.google.com/p/apdt/

也许它有帮助。

于 2012-04-13T17:51:14.307 回答
0

你能用 _ 在它们前面重命名你的方法吗?那么所有呼叫都将通过 __call / __callStatic 路由?

于 2012-04-13T17:52:07.317 回答