Affe Patching in PHP

Ich versuche herauszufinden, wie das Patchen von Affen funktioniert und wie ich es auf meine eigenen Objekte / Methoden anwenden kann.

Ich habe mir diese Bibliothek angesehen, sie macht genau das, was ich selbst machen möchte:https://github.com/antecedent/patchwork

Damit können Sie eine Methode aus einem Objekt neu definieren. Hierfür wird die Affenpflastertechnik verwendet. Aber ich konnte nicht wirklich herausfinden, was genau los ist, indem ich auf die Quelle schaute.

Angenommen, ich habe das folgende Objekt:

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

class MyClass {

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

Ich würde gerne so etwas machen:

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

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

Aber ich bin nicht sicher, wie ich den eigentlichen Patching-Teil codieren soll. Ich weiß, dass Namespaces in diesem Zusammenhang wichtig sind. Aber wie kann ich genau eine bestimmte Methode patchen? Und muss ich eval () irgendwo verwenden (wenn ja, wie)?

Ich konnte zu diesem Thema keine wirklich guten Beispiele finden, außer:http://till.klampaeckel.de/blog/archives/105-Monkey-patching-in-PHP.html

Aber ich verstehe wirklich nicht, wie ich das auf meine eigenen Objekte / Methoden anwenden kann. Ich hoffe auf eine gute Erklärung oder ein gutes Beispiel.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage