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.