PHP Conference Japan 2024

Closure::call

(PHP 7, PHP 8)

Closure::call绑定并调用闭包

描述

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

临时将闭包绑定到 newThis,并使用任何给定的参数调用它。

参数

newThis

在调用期间将闭包绑定到的 object

args

零个或多个参数,这些参数将作为参数传递给闭包。

返回值

返回闭包的返回值。

示例

示例 #1 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);
?>

以上示例将输出

int(7)
int(8)
添加注释

用户贡献注释 2 条注释

4
php-net at gander dot pl
3 年前
您还可以访问私有数据

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

输出
string(3) "Foo"
string(3) "Bar"
2
sergey dot nevmerzhitsky at gmail dot com
8 年前
在 PHP 7.0 之前,您可以使用此代码

<?php
$cl
= function($add) { return $this->a + $add; };

$cl->bindTo($newthis);
return
call_user_func_array($cl, [10]);
?>

但这会永久绑定闭包!另请阅读 Closure::bindTo() 的文章,了解有关从静态上下文中绑定闭包的信息。
To Top