📜  添加了closure::call()[2] (1)

📅  最后修改于: 2023-12-03 15:11:07.147000             🧑  作者: Mango

添加了closure::call()[2]

在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必须被绑定到一个对象上,否则在调用时会抛出异常。