Исправление обезьян в 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

Но я действительно не понимаю, как я могу применить это к своим собственным объектам/методам. Я надеюсь на хорошее объяснение или пример.

5
задан iconoclast 28 May 2015 в 20:09
поделиться