PHP:每次调用方法时都会执行魔术方法

时间:2012-04-13 17:49:16

标签: php oop magic-methods

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

3 个答案:

答案 0 :(得分:5)

没有。您要求的内容称为"advice"aspect oriented programming。我相信有一些实验扩展可以在PHP中实现这一点,但是你不想在生产中使用它。

您可以做的是创建一个包装器,通过__call委派所有来电。 E.g:

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

答案 1 :(得分:0)

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

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

也许有帮助。

答案 2 :(得分:0)

你可以在他们面前用_重命名你的方法吗?那么所有的调用都将通过__call / __callStatic?

进行路由