Php 简明教程
PHP – Closure::call()
在 PHP 中, closure 是一个匿名函数,可以访问其创建的范围内的变量,即使该范围已经关闭。你需要在其中指定 use 关键字。
闭包将函数代码与创建它们的范围封装在对象中。在 PHP 7 中,引入了一个新的 closure::call() 方法来将对象范围绑定到闭包并调用它。
Methods in the Closure Class
闭包类具有以下方法,包括 call() 方法 −
final class Closure {
/* Methods */
private __construct()
public static bind(Closure $closure, ?object $newThis, object|string|null $newScope = "static"): ?Closure
public bindTo(?object $newThis, object|string|null $newScope = "static"): ?Closure
public call(object $newThis, mixed ...$args): mixed
public static fromCallable(callable $callback): Closure
}
call() method 是闭包类的静态方法。它被引入为 bind() 或 bindTo() 方法的快捷方式。
bind() method 根据特定的 bound 对象和类范围复制闭包,而 bindTo() 方法则使用新的 bound 对象和类范围复制闭包。
call() 方法具有以下 signature −
public Closure::call(object $newThis, mixed ...$args): mixed
call() 方法将闭包临时绑定到 newThis,并使用任何给定的参数调用它。
在 PHP 7 之前的版本中,bindTo() 方法可以使用如下方式:
<?php
class A {
private $x = 1;
}
// Define a closure Pre PHP 7 code
$getValue = function() {
return $this->x;
};
// Bind a clousure
$value = $getValue->bindTo(new A, 'A');
print($value());
?>
该程序将 $getValue (它是一个闭包对象)绑定到 A 类的对象,并打印其私有变量 $x 的值 - 它为 1。
在 PHP 7 中,绑定通过 call() 方法实现,如下所示 −
<?php
class A {
private $x = 1;
}
// PHP 7+ code, Define
$value = function() {
return $this->x;
};
print($value->call(new A));
?>