PHP:运行另一个类方法时运行类方法?
答
随着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
。
答
你最好的选择是延长原来的类,并重写添加你的代码的方法。
class MyClass extends OriginalClass
{
public function originalMethod()
{
parent::originalMethod();
// My code...
}
}
$myClass = new MyClass();
$myClass->originalMethod();
答
你所试图做的是叫做Aspect Oriented Programming。
目前虽然您可以使用扩展名,但PHP并不支持这种开箱即用的功能。下面是帖子,解释一些选项:http://sebastian-bergmann.de/archives/573-Current-State-of-AOP-for-PHP.html
完美无缺的作品,谢谢。 也加入这有助于: \t功能&__得到($ prop_name){ \t \t如果(isset($这个 - > originalClass - > $ prop_name)){ \t \t \t回$这个 - > originalClass - > $ prop_name; \t \t} else { \t \t \t return false; \t \t} \t} :P – 2010-02-01 12:02:21
绝对没错,但为了简洁起见,我跳过它。 – Gordon 2010-02-01 12:09:03