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. php在运行时创建类方法
- 3. Android:在运行时多次检查另一个类的方法
- 4. 通过另一个类的运行类方法
- 5. 从另一个类运行类的方法
- 6. 从另一种方法运行方法
- 7. 父运行类方法
- 8. 通用方法中执行一个运行时类型
- 9. C#在运行时更改类方法
- 10. 通用方法与运行时类型
- 11. 从另一个方法运行shouldAutorotateToInterfaceOrientation?
- 12. 如何从另一个类运行方法
- 13. 锁定访问另一个类,从运行方法
- 14. 如何运行java中另一个包的类的方法
- 15. 如何从另一个类在Ruby中运行的方法
- 16. 从另一个类运行协议方法 - Objective-C
- 17. 在另一种方法中运行一个方法。 python
- 18. php:如何让一个类中的方法运行?
- 19. Ember.js在运行类方法时抛出“没有方法”错误
- 20. 调用从一个类的方法在运行时
- 21. 如何在运行时为Obj-C添加一个类方法?
- 22. 在子流程中运行类的另一种方法
- 23. 另一类中带参数的单独线程运行方法
- 24. 另一个组件运行从派生类的基类方法动态
- 25. 运行一个方法,如果它尚未与当前类一起运行?
- 26. 运行时类型VS编译时类型的方法调用
- 27. Python方法不能运行在类
- 28. Python:在类方法中运行线程
- 29. Android,运行其他类的方法
- 30. Thread类中的运行方法
完美无缺的作品,谢谢。 也加入这有助于: \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