Я пытаюсь понять, как работает исправление обезьян и как я могу заставить его работать на моих собственных объектах/ методы.
Я смотрел на эту библиотеку, она делает именно то, что я хочу сделать сам: https://github.com/antecedent/patchwork
С ее помощью вы можете переопределить метод из объекта. Для этого он использует технику «обезьяньего патча». Но я не мог понять, что именно происходит, глядя на источник.
Итак, предположим, что у меня есть следующий объект:
//file: MyClass.php
namespace MyClass;
class MyClass {
public function say()
{
echo 'Hi';
}
}
Я хотел бы сделать что-то вроде этого:
Monkeypatch\replace('MyClass', 'say', function() {
echo 'Hello';
});
$obj = new MyClass();
$obj->say(); // Prints: 'Hello'
Но я не уверен, как кодировать фактическую часть исправления. Я знаю, что пространства имен в этом контексте важны. Но как именно это позволяет мне исправлять определенный метод? И нужно ли мне использовать eval()где-то (, если да, то как)?
Я не смог найти хороших примеров по этому вопросу, кроме: http://till.klampaeckel.de/blog/archives/105-Monkey-patching-in-PHP.html
Но я действительно не понимаю, как я могу применить это к своим собственным объектам/методам. Я надеюсь на хорошее объяснение или пример.