PHP 8.4.1 Released!

Closure::call

(PHP 7, PHP 8)

Closure::callBinds and calls the closure

Опис

public Closure::call(object $newThis, mixed ...$args): mixed

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.

Приклади

Приклад #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);
?>

Поданий вище приклад виведе:

int(7)
int(8)
add a note

User Contributed Notes 2 notes

up
4
php-net at gander dot pl
3 years ago
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"
up
4
sergey dot nevmerzhitsky at gmail dot com
8 years ago
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.
To Top