PHP将附加参数传递给回调函数


PHP pass additional parameters to callback function

有没有办法将额外的参数传递给回调函数?

class Bar{
  public function test(){
      $count = 0; 
      $foo = new Class();
      $foo->calling([$this, 'barFunction']);
  }
  public function barFunction($data, $count){
      //...
  }

我希望Foo的调用方法传入数据,并将$count作为第二个参数。

下面是一个使用闭包而不是参数的示例。如果我使用闭包,我可以传入$count,但在这种情况下,我需要使用Bar的类函数。

class Bar{
  public function test(){
      $count = 0; 
      $foo = new Class();
      $foo->calling(function($data) use($count){
         //..some work
      });
  }

可以使用call_user_func_array

call_user_func_array([$context, $function], $params);

即,在您的示例中,$context将是Bar($this),$function将是您的'barFunction',参数将是[$data, $count]

像这样?

<?php 
class Foo {
    public function __construct() {}
    public function mDo($callback) {
        $count = 10;
        $data = ['a', 'b'];
        // do a lot of work (BLOCKING)
        call_user_func_array($callback, [$data, $count]);
    }
}
class Bar {
    public function test() {
        $a = new Foo();
        $a->mDo([$this, 'callback']);
    }
    public function callback($data, $count) {
        print($data);
        print($count);
    }
}
$bar = new Bar();
$bar->test();
OOP是你的朋友。将回调声明为类:
class BarCallback {
    private $count;
    public function __construct($count) {
        $this->count = $count;
    }
    public function callback($data) {
        // do work here
    }
}

然后Bar看起来像这样:

class Bar {
  public function test() {
      $count = 0; 
      $foo = new Class();
      $bar_cb = new BarCallback($count);
      $foo->calling([$bar_cb, 'callback']);
  }
}

这有帮助吗?