カスタム フレームワーク用に開発しているイベント システムのアイデアがあります。
このような疑似関数を想像してください。
class Test
{
public function hi()
{
Event::add(__FUNCTION__ . 'is about to run.');
return "hi";
}
}
さらにいくつかの関数に対して同じことを行う必要があると想像してください。(実行時に実行された関数をログに記録し、それらを別のファイルに記録したい場合があります。)
これを行ってイベントを手動で関数に追加する代わりに、このようなことを行うことはできますか?
class Test
{
public function hi()
{
return "hi";
}
}
// events.php (It's a pseudo code so may not work.)
// Imagine extend's purpose is to inject codes into target function
Event::bind('on', $className, $methodName, function() use ($className, $methodName)
{
return $className->$methodName->extend('before', Event::add(__FUNCTION__ . 'is about to run.'));
});
アイデアは、hi()
内部にある関数を注入し、外部から関数Test class
に渡すものを注入することです。は、注入がターゲット関数の最初の行にある必要があることを意味します。extend
'before'
最後に、イベントとイベント バインディングは関数から完全に抽象化された状態に保たれます。関数を変更せずにカスタムのものをバインドできるようにしたい。
eval()
をハッキングしたり、いじったりすることで、これを行うことができると思いますcall_user_func()
。よくわかりませんが。使用eval()
はすでにかなり悪い音です。
私の質問は;
- PHPでできることはありますか?
- OOP/OOP Principles に名前があるので、さらに読むことができますか?
- それは意味がありますか、それとも悪い考えですか?