Is there a way to pass additional parameters to a callback function?
class Bar{
public function test(){
$count = 0;
$foo = new Class();
$foo->calling([$this, 'barFunction']);
}
public function barFunction($data, $count){
//...
}
I want Foo's calling method to pass data in and to also pass $count as the second parameter.
Here is an example with a closure instead of a parameter. If I use a closure I can pass $count in but in this case I need to use Bar's class function.
class Bar{
public function test(){
$count = 0;
$foo = new Class();
$foo->calling(function($data) use($count){
//..some work
});
}
Could use call_user_func_array
call_user_func_array([$context, $function], $params);
i.e. in your example, $context
would be Bar ($this
), $function
would be your 'barFunction'
, and the params would be [$data, $count]
.
Like this?
<?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 is your friend. Declare the callback as a class:
class BarCallback {
private $count;
public function __construct($count) {
$this->count = $count;
}
public function callback($data) {
// do work here
}
}
And then Bar
would look something like this:
class Bar {
public function test() {
$count = 0;
$foo = new Class();
$bar_cb = new BarCallback($count);
$foo->calling([$bar_cb, 'callback']);
}
}
Does that help?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With