0
A
回答
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
这是不可能的,你将不得不改变功能来实现这一点。但你可能需要一个observer pattern(zend家伙描述observer pattern on zend.com)
1
你最好的选择是延长原来的类,并重写添加你的代码的方法。
class MyClass extends OriginalClass
{
public function originalMethod()
{
parent::originalMethod();
// My code...
}
}
$myClass = new MyClass();
$myClass->originalMethod();
1
你所试图做的是叫做Aspect Oriented Programming。
目前虽然您可以使用扩展名,但PHP并不支持这种开箱即用的功能。下面是帖子,解释一些选项:http://sebastian-bergmann.de/archives/573-Current-State-of-AOP-for-PHP.html
1
相关问题
- 1. 在另一个类方法中运行类方法
- 2. 通过另一个类的运行类方法
- 3. 从另一个类运行类的方法
- 4. 通用方法中执行一个运行时类型
- 5. C#在运行时更改类方法
- 6. 通用方法与运行时类型
- 7. 从另一个方法运行shouldAutorotateToInterfaceOrientation?
- 8. 锁定访问另一个类,从运行方法
- 9. 如何运行java中另一个包的类的方法
- 10. 在另一种方法中运行一个方法。 python
- 11. php:如何让一个类中的方法运行?
- 12. 另一类中带参数的单独线程运行方法
- 13. 运行一个方法,如果它尚未与当前类一起运行?
- 14. PHP如何在运行时从类中调用方法?
- 15. 通用类型的运行方法
- 16. Python:在类方法中运行线程
- 17. 运行C类中的所有方法#
- 18. 在线程中运行类方法(python)
- 19. Thread类中的运行方法
- 20. 运行其他类的主要方法
- 21. 运行时错误1004无法运行工作表类的粘贴方法
- 22. PHP提交表单到另一个页面,并运行方法
- 23. 是运行时方法
- 24. 运行方法同时
- 25. 运行一系列方法
- 26. 在Rails中运行另一种方法之前调用方法
- 27. Eclipse快捷方式运行一个类
- 28. 方法在另一个类
- 29. 通行证类的另一种方法
- 30. 执行方法/代码基于运行时对象类型
完美无缺的作品,谢谢。 也加入这有助于: \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