(PHP 7, PHP 8)
Closure::call — Binds and calls the closure
Temporarily binds the closure to newThis, and calls
it with any given parameters.
newThisThe object to bind the closure to for the duration of the call.
argsZero or more parameters, which will be given as parameters to the closure.
Returns the return value of the closure.
Example #1 Closure::call() example
<?php
class Value {
protected $value;
public function __construct($value) {
$this->value = $value;
}
public function getValue() {
return $this->value;
}
}
$three = new Value(3);
$four = new Value(4);
$closure = function ($delta) { var_dump($this->getValue() + $delta); };
$closure->call($three, 4);
$closure->call($four, 4);
?>The above example will output:
int(7) int(8)
You can also access private data:
<?php
class Value {
private $value;
public function __construct($value) {
$this->value = $value;
}
}
$foo = new Value('Foo');
$bar = new Value('Bar');
$closure = function () { var_dump($this->value); };
$closure->call($foo);
$closure->call($bar);
?>
Output:
string(3) "Foo"
string(3) "Bar"Prior PHP 7.0 you can use this code:
<?php
$cl = function($add) { return $this->a + $add; };
$cl->bindTo($newthis);
return call_user_func_array($cl, [10]);
?>
But this bind the closure permanently! Also read the article for Closure::bindTo() about binding closures from static context.