- PHP7的 Closure::call() 有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数。
- 和bind()、binTo() 相比。一定要记住,call() 最后还调用了函数,所以前二者的返回值是一个闭包对象,而call()不是。
使用例子:
<?php
class A
{
private $x = 1;
}
// PHP7 之前
$fun1 = function () {
return $this->x;
};
// 将闭包函数绑定到类A上
$res1 = $fun1->bindTo(new A(), 'A'); // 此时返回的的$res1就是一个闭包,
// 或者说是一个匿名函数更准确(在PHP中匿名函数就是闭包)
var_dump($res1()); // D:\wamp64\www\numb\2020-3-26\demo-03.php:22:int 1
// PHP7+ 代码
$fun2 = function () {
return $this->x;
};
$res2 = $fun2->call(new A());
var_dump($res2); // D:\wamp64\www\numb\2020-3-26\demo-03.php:22:int 1