PHP 8.4.0 RC2 available for testing

Closure::call

(PHP 7, PHP 8)

Closure::callVincula e chama a closure

Descrição

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

Vincula temporáriamente a closure ao newThis, e a chama com qualquer parâmetro fornecido.

Parâmetros

newThis

O object a ser vinculado a closure enquanto durar a chamada.

args

Zero ou mais parâmetros, que serão fornecidos como parâmetros para a closure.

Valor Retornado

Retorna o valor de retorna da closure.

Exemplos

Exemplo #1 Exemplo do método Closure::call()

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

O exemplo acima produzirá:

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
2
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