代码之家  ›  专栏  ›  技术社区  ›  Timo Huovinen

PHP:在运行另一个类方法时运行类方法?

  •  0
  • Timo Huovinen  · 技术社区  · 16 年前

    运行特定类方法时运行函数

    怎样?

    5 回复  |  直到 16 年前
        1
  •  5
  •   Gordon Haim Evgi    14 年前

    用一个 decorator :

    class MyClassDecorator
    {
        protected $decoratedInstance;
    
        public function __construct($decoratedInstance)
        {
            $this->decoratedInstance = $decoratedInstance;
        }
    
        public function methodNameInOriginalClass()
        {
            $this->decoratedInstance->methodIWantToRunBefore();
            $this->decoratedInstance->methodNameInOriginalClass();
            $this->decoratedInstance->methodIWantToRunAfter();
        }
    
        public function __call($method, $args)
        {
            if (method_exists($this->decoratedInstance, $method)) {
                return call_user_func_array(
                    array($this->decoratedInstance, $method), 
                    $args
                );
            }
        }
    }
    

    public $decoratedInstance .

        2
  •  1
  •   soulmerge    16 年前

    这是不可能的,您必须更改函数才能实现这一点。但你可能需要一个 observer pattern observer pattern on zend.com (也是)

        3
  •  1
  •   Stephen Melrose    16 年前

    class MyClass extends OriginalClass
    {
        public function originalMethod()
        {
            parent::originalMethod();
    
            // My code...
        }
    }
    
    $myClass = new MyClass();
    $myClass->originalMethod();
    
        4
  •  1
  •   Emil Ivanov    16 年前

    Aspect Oriented Programming .

    目前PHP不支持这种开箱即用的方式,尽管您可以使用扩展。下面是一篇解释一些选项的帖子: http://sebastian-bergmann.de/archives/573-Current-State-of-AOP-for-PHP.html

        5
  •  1
  •   just somebody    16 年前
    • runkit :替换、重命名和删除用户定义的函数和类。
    • funcall :在调用指定函数/方法之前或之后调用回调。
    • intercept :允许用户在调用指定函数或方法时调用用户空间函数。

    推荐文章