我试图弄清楚猴子补丁是如何工作的,以及如何让它在我自己的对象/方法上工作。
我一直在看这个库,它完全符合我自己想做的事情: https ://github.com/antecedent/patchwork
使用它,您可以从对象重新定义方法。它为此使用了“猴子补丁”技术。但是通过查看源代码,我无法真正弄清楚到底发生了什么。
所以假设我有以下对象:
//file: MyClass.php
namespace MyClass;
class MyClass {
public function say()
{
echo 'Hi';
}
}
我想做这样的事情:
Monkeypatch\replace('MyClass', 'say', function() {
echo 'Hello';
});
$obj = new MyClass();
$obj->say(); // Prints: 'Hello'
但我不确定如何编写实际的修补部分。我知道在这种情况下命名空间很重要。但这究竟是如何让我修补某种方法的呢?我是否需要在某处使用 eval() (如果需要,如何)?
除了: http ://till.klampaeckel.de/blog/archives/105-Monkey-patching-in-PHP.html
但我真的不知道如何将其应用于我自己的对象/方法。我希望有一个很好的解释或例子。