Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的JS anon函数(不支持anon函数)_Php_Anonymous Function - Fatal编程技术网

PHP中的JS anon函数(不支持anon函数)

PHP中的JS anon函数(不支持anon函数),php,anonymous-function,Php,Anonymous Function,假设我有这个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.l

假设我有这个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]));
}

我看到的一种可能的方法是使用
\u invoke

$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);
}

class EventRedirector {
    public $event_name = '';
    public $redirector = '';
    public function __invoke(){
        $redirector = $this->redirector;
        return $redirector($this->event_name, func_get_args());
    }
    public function __construct($event_name, $redirector){
        $this->event_name = $event_name;
        $this->redirector = $redirector;
    }
}

foreach($events as $event){
    $obj->on($event, new EventRedirector($event, 'receiver'));
}
$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);
}

class EventRedirector {
    public $event_name = '';
    public $redirector = '';
    public function __invoke(){
        $redirector = $this->redirector;
        return $redirector($this->event_name, func_get_args());
    }
    public function __construct($event_name, $redirector){
        $this->event_name = $event_name;
        $this->redirector = $redirector;
    }
}

foreach($events as $event){
    $obj->on($event, new EventRedirector($event, 'receiver'));
}