Я пытаюсь выяснить, как работает патч обезьян и как я могу заставить его работать над своими собственными объектами/методами.Прыжки обезьян в php
Я смотрел на этой библиотеке, он делает именно то, что я хочу сделать сам: 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
Но я действительно не понимаю, как я могу применить это к своим собственным объектам/методов. Я надеюсь на хорошее объяснение или пример.
Я понимаю пример strlen из webstie. Но не как применять это на моих собственных объектах. Он не говорит, как переопределить методы, подобные тому, как это делается в лоскутной одежде. Я также не ищу какую-либо библиотеку ohter, такую как runkit и т. Д. Я просто хочу знать, как сделать обезьянную патчу самостоятельно с помощью простого PHP. – w00
@ w00 Пример, упомянутый на веб-сайте, не является патчем обезьян, как вы можете понять, поскольку вы получаете всю точку с пространствами имен. Вот почему вы не получаете никаких примеров переопределения функций внутри классов. Если ваш интерес к патчу обезьян строго для модульного тестирования, то почему бы вам не использовать runkit на вашем сервере разработки? Иначе почему бы вам не попробовать попробовать пэчворк? Однако я не знаю, насколько это хорошо. – mobius