Macaco de patch em php

Estou tentando descobrir como funciona o monkey patching e como posso fazê-lo funcionar em meus próprios objetos / métodos.

Eu estive olhando para esta lib, faz exatamente o que eu quero fazer:https://github.com/antecedent/patchwork

Com ele você pode redefinir um método a partir de um objeto. Ele usa a técnica de 'patch de macaco' para isso. Mas eu não consegui descobrir exatamente o que está acontecendo olhando para a fonte.

Então, suponha que eu tenha o seguinte objeto:

<code>//file: MyClass.php
namespace MyClass;

class MyClass {

    public function say()
    {
        echo 'Hi';
    }
}
</code>

Eu gostaria de fazer algo assim:

<code>Monkeypatch\replace('MyClass', 'say', function() {
    echo 'Hello';
});

$obj = new MyClass();
$obj->say();  // Prints: 'Hello'
</code>

Mas eu não sei como codificar a parte de patch atual. Eu sei que namespaces neste contexto são importantes. Mas como isso exatamente me permite corrigir um certo método? E eu preciso usar eval () em algum lugar (se sim, como)?

Eu realmente não encontrei bons exemplos sobre este assunto, exceto:http://till.klampaeckel.de/blog/archives/105-Monkey-patching-in-PHP.html

Mas eu realmente não vejo como posso aplicar isso aos meus próprios objetos / métodos. Eu estou esperando por uma boa explicação ou exemplo.

questionAnswers(5)

yourAnswerToTheQuestion