サルのパッチがどのように機能するか、およびそれを自分のオブジェクト/メソッドで機能させる方法を理解しようとしています。
私はこのライブラリを見てきましたが、それは私が自分でやりたいことを正確に行います: 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() を使用する必要がありますか (そうであれば、どのように)?
この問題に関する良い例を実際に見つけることができませんでした 。
しかし、それを自分のオブジェクト/メソッドに適用する方法が本当にわかりません。良い説明や例を期待しています。