PHP Conference Japan 2024

Closure::call

(PHP 7, PHP 8)

Closure::call綁定並呼叫閉包

說明

public Closure::call(物件 $newThis, 混合 ...$args): 混合

暫時將閉包綁定到 newThis,並使用任何給定的參數呼叫它。

參數

newThis

在呼叫期間要將閉包綁定的 物件

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 則註釋

php-net at gander dot pl
3 年前
您也可以存取私有資料

<?php
類別 Value {
私有
$value;

公開 函數
__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);
?>

輸出
字串(3) "Foo"
字串(3) "Bar"
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