ł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.

questionAnswers(5)

yourAnswerToTheQuestion