mono parcheando en php

Estoy tratando de averiguar cómo funcionan los parches de mono y cómo puedo hacer que funcione con mis propios objetos / métodos.

He estado mirando esta biblioteca, hace exactamente lo que yo quiero hacer:https://github.com/antecedent/patchwork

Con él puedes redefinir un método desde un objeto. Utiliza la técnica de 'parche de mono' para eso. Pero realmente no pude averiguar qué es exactamente lo que está sucediendo mirando la fuente.

Así que supongamos que tengo el siguiente objeto:

//file: MyClass.php
namespace MyClass;

class MyClass {

    public function say()
    {
        echo 'Hi';
    }
}

Me gustaría hacer algo como esto:

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

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

Pero no estoy seguro de cómo codificar la parte actual de parches. Sé que los espacios de nombres en este contexto son importantes. Pero, ¿cómo eso me permite parchear exactamente un método determinado? ¿Y necesito usar eval () en algún lugar (si es así, cómo)?

Realmente no pude encontrar ningún buen ejemplo sobre este asunto, excepto:http://till.klampaeckel.de/blog/archives/105-Monkey-patching-in-PHP.html

Pero realmente no veo cómo puedo aplicar eso a mis propios objetos / métodos. Espero una buena explicación o ejemplo.