PHP:在运行另一个类方法时运行类方法?
PHP: 运行特定类方法时运行函数 我想要的是在运行类方法时运行一些附加函数,而不改变已经存在的类PHP:在运行另一个类方法时运行类方法?,php,class,methods,listener,Php,Class,Methods,Listener,PHP: 运行特定类方法时运行函数 我想要的是在运行类方法时运行一些附加函数,而不改变已经存在的类 如何操作?这是不可能的,您必须更改函数才能实现这一点。但是您可能需要一个(zend的人也描述了)您最好的选择是扩展原始类并覆盖添加代码的方法 class MyClass extends OriginalClass { public function originalMethod() { parent::originalMethod(); // My
如何操作?这是不可能的,您必须更改函数才能实现这一点。但是您可能需要一个(zend的人也描述了)您最好的选择是扩展原始类并覆盖添加代码的方法
class MyClass extends OriginalClass
{
public function originalMethod()
{
parent::originalMethod();
// My code...
}
}
$myClass = new MyClass();
$myClass->originalMethod();
你想做的事叫做 目前PHP不支持这种开箱即用的方式,尽管您可以使用扩展。下面是一篇解释一些选项的帖子:
- :替换、重命名和删除用户定义的函数和类
- :在调用指定函数/方法之前或之后调用回调
- :允许用户在调用指定函数或方法时调用用户空间函数
以上假设您要调用的方法是
$decoratedInstance
上的public
,谢谢。另外,添加这个函数也有帮助:function&u get($prop_name){if(isset($this->originalClass->$prop_name)){return$this->originalClass->$prop_name;}否则{return false;}}:绝对是的,但为了简洁起见,我跳过了它。
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
);
}
}
}