Closure::call

(PHP 7, PHP 8)

Closure::callBindet eine Closure und ruft sie auf

Beschreibung

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

Bindet eine Closure vorübergehend an newThis und ruft sie mit den angegebenen Parametern auf.

Parameter-Liste

newThis

Das Objekt, an das die Closure für die Dauer des Aufrufs gebunden wird.

args

Optional können beliebig viele Parameter angegeben werden, die an die Closure übergeben werden sollen.

Rückgabewerte

Gibt den Rückgabewert der Closure zurück.

Beispiele

Beispiel #1 Closure::call()-Beispiel

<?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);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

int(7)
int(8)
add a note add a note

User Contributed Notes 2 notes

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.
up
2
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"
To Top