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.