PHP: 运行特定的类方法时运行函数
我想要的是在运行类方法时运行一些额外的函数而不改变已经存在的类。
如何?
答案 0 :(得分:5)
使用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
。
答案 1 :(得分:1)
这是不可能的,你将不得不改变功能来实现这一目标。但是你可能需要一个observer pattern(zend家伙也会描述observer pattern on zend.com)
答案 2 :(得分:1)
最好的办法是扩展原始类并覆盖添加代码的方法。
class MyClass extends OriginalClass
{
public function originalMethod()
{
parent::originalMethod();
// My code...
}
}
$myClass = new MyClass();
$myClass->originalMethod();
答案 3 :(得分:1)
您要做的事情称为Aspect Oriented Programming。
目前,PHP不支持开箱即用,但您可以使用扩展程序。这篇文章解释了一些选项:http://sebastian-bergmann.de/archives/573-Current-State-of-AOP-for-PHP.html
答案 4 :(得分:1)