1

この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());
    // ???
}
4

1 に答える 1