(PHP 7, PHP 8)
Closure::call — Binds and calls the closure
Temporarily binds the closure to newThis
, and calls
it with any given parameters.
newThis
The object to bind the closure to for the duration of the call.
args
Zero 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.