Closure::call

(PHP 7, PHP 8)

Closure::call绑定并调用闭包

说明

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

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

参数

newThis

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

args

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

返回值

返回闭包的返回值。

范例

Example #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($three4);
$closure->call($four4);
?>

以上例程会输出:

int(7)
int(8)

User Contributed Notes

php-net at gander dot pl 19-Aug-2021 10:23
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"
sergey dot nevmerzhitsky at gmail dot com 16-Sep-2016 10:12
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.
PHP8中文手册 站长在线 整理 版权归PHP文档组所有