このJSコードがあるとしましょう:
var events = ['start', 'stop', 'tick']
, obj = ... // object with events
, receiver = function(event_name, event_args){ // function to receive all events
console.log(event_name, event_args);
}
;
for(var i=0; i<events.length; i++){
obj.on(events[i], (function(event){
return function(){
return receiver(event, arguments);
};
})(events[i]));
}
ここで行っているのは、すべてのイベントを関数「レシーバー」にルーティングすることです。
私はすでにobj.on
( $obj->on
) 機能を持っているので、PHP でこの動作を複製しようとしています。
(少し)古いPHPバージョン(5.1+)をサポートしたいので、無名関数を使用できません(変数をその関数に渡すこともできません)。
上記のコードの暫定的な (そして不完全な) バージョンを次に示します。
$events = array('start', 'stop', 'tick');
$obj = new ... ; // object with events
function receiver($event_name, $event_args){ // function to receive all events
echo $event_name.' | '.print_r($event_args, true);
}
foreach($events as $event){
$obj->on($event, ...); // ???
// ???
return receiver($event, func_get_arguments());
// ???
}