【问题标题】:PHP: magic method executed each time a method is calledPHP:每次调用方法时执行的魔术方法
【发布时间】:2012-04-14 01:57:13
【问题描述】:

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

【问题讨论】:

    标签: php oop magic-methods


    【解决方案1】:

    没有。您要求的内容称为"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

    【讨论】:

      【解决方案2】:

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

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

      也许有帮助。

      【讨论】:

      • 编辑了帖子。也许它有帮助:)
      • 谢谢Kufi 看来AOP是我需要的,但是对于我的小项目我觉得troelskn的解决方案就足够了
      【解决方案3】:

      你能重命名你的方法并在它们前面加上一个 _ 吗?那么所有的呼叫都会通过 __call / __callStatic 路由?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-13
        • 1970-01-01
        • 2019-01-30
        • 2015-08-08
        • 2023-03-14
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多