łatanie małp w php
Próbuję dowiedzieć się, jak działa poprawianie małp i jak mogę sprawić, by działało na moich własnych obiektach / metodach.
Patrzyłem na tę bibliotekę, robi dokładnie to, co chcę zrobić sam:https://github.com/antecedent/patchwork
Dzięki niemu możesz przedefiniować metodę z obiektu. Wykorzystuje do tego technikę „małpy”. Ale nie mogłem zrozumieć, o co dokładnie chodzi, patrząc na źródło.
Przypuśćmy więc, że mam następujący obiekt:
<code>//file: MyClass.php namespace MyClass; class MyClass { public function say() { echo 'Hi'; } } </code>
Chciałbym zrobić coś takiego:
<code>Monkeypatch\replace('MyClass', 'say', function() { echo 'Hello'; }); $obj = new MyClass(); $obj->say(); // Prints: 'Hello' </code>
Ale nie jestem pewien, jak zakodować rzeczywistą część łatania. Wiem, że przestrzenie nazw w tym kontekście są ważne. Ale jak to dokładnie pozwala mi załatać pewną metodę? Czy muszę gdzieś używać eval () (jeśli tak, to w jaki sposób)?
Nie mogłem znaleźć dobrych przykładów na ten temat, z wyjątkiem:http://till.klampaeckel.de/blog/archives/105-Monkey-patching-in-PHP.html
Ale naprawdę nie widzę, jak mogę zastosować to do moich własnych obiektów / metod. Mam nadzieję na dobre wyjaśnienie lub przykład.