ł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:
//file: MyClass.php
namespace MyClass;
class MyClass {
public function say()
{
echo 'Hi';
}
}
Chciałbym zrobić coś takiego:
Monkeypatch\replace('MyClass', 'say', function() {
echo 'Hello';
});
$obj = new MyClass();
$obj->say(); // Prints: 'Hello'
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.