PHP:运行特定类方法时的运行函数
我想要的是在运行类方法时运行一些额外的功能而不改变已经存在的类。
如何?
使用装饰器:
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
.
这是不可能的,您必须更改功能才能实现。但是你可能需要一个观察者模式(zend 的人也在 zend.com 上描述了观察者模式)
最好的办法是扩展原始类并覆盖添加代码的方法。
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