PHP中的JS anon函数(不支持anon函数)
假设我有这个JS代码: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
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'));
}