📅  最后修改于: 2023-12-03 15:11:07.147000             🧑  作者: Mango
在PHP中,closure通常被用来创建匿名函数,而closure::call()则是用来指定当前closure所需要绑定的对象,并调用该closure。
$closure->call($object, $args);
$object
: closure绑定的对象。$args
: 传递给closure的参数列表,必须是一个数组。closure返回的结果。
<?php
class Test {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function helloClosure() {
$closure = function($greeting) {
return $greeting.' '.$this->name.'!';
};
echo $closure->call($this, 'Hello');
}
}
$test = new Test('John');
$test->helloClosure(); // 输出:Hello John!
?>
在上面的示例中,我们创建了一个closure,并在Test类的helloClosure()方法中调用它。我们使用$closure->call($this, 'Hello')
来调用closure,并传递Test类的实例作为第一个参数,这样closure就可以访问Test实例的属性。最终输出的结果是:Hello John!
。
在实际开发中,closure::call()可以用来动态绑定closure并调用它,特别是在动态生成的代码中。但要注意,closure必须被绑定到一个对象上,否则在调用时会抛出异常。