我想弄清楚猴子修補是如何工作的以及如何讓它在我自己的對象/方法上工作。在PHP中修補猴子
我一直在尋找這樣的lib,這不正是我想要做自己: 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
但我真的不知道怎樣才能應用,爲我自己的對象/方法。我希望有一個很好的解釋或例子。
我瞭解webstie的strlen示例。但不是如何將這個應用於我自己的對象。它沒有說明如何重新定義拼湊方法。我也沒有找到任何像runkit等ohter庫。我只是想知道如何使用普通的PHP來修補自己的猴子。 – w00 2012-04-08 18:48:39
@ w00在網站中提到的示例並不像您所能理解的那樣是猴子修補,因爲您可以通過名稱空間獲得整個觀點。這就是爲什麼你沒有得到任何覆蓋類內部函數的例子。如果您對猴子補丁的興趣嚴格限於單元測試,那麼您爲什麼不在開發服務器上使用runkit?否則,爲什麼你不拼湊拼湊試試?但是,我不知道它是否能夠擴大這種優勢。 – mobius 2012-04-08 19:16:34