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