我正在努力了解闭包类,在手册中,所有在手动链接,
闭包:__construct-不允许实例化的构造函数。如果我理解正确的话,这个类的唯一实例就是匿名函数变量赋值。
但我不明白几行:
闭包::bind--用特定的绑定对象和类作用域复制闭包。
闭包::bindTo--使用新的绑定对象和类作用域复制闭包。
最后在手册上我不明白这句话:
除了这里列出的方法之外,这个类还有一个__invoke方法这是为了与实现的其他类保持一致调用magic,因为此方法不用于调用函数。
如果有人能试着向我解释这些台词,我将非常感谢,祝你今天愉快。
它指的是调用魔术。
据我所知,对于任何包含方法__invoke
的类,其实例都可以像调用函数一样调用。Closure::__invoke
就是这样。
即,当$foo
属于Closure
类(匿名函数)时,调用$foo($bar)
将调用$foo->__invoke(bar)
(尽管__invoke
成员不是直接调用的,但这只是为了展示它的工作原理)。
当你定义匿名函数时,你会这样做:
$greet = function($name)
{
printf("Hello %s'r'n", $name);
};
现在,$greet
属于Closure
类。并且CCD_ 10在某种程度上等于CCD_
记住,Closure::__invoke
是一种神奇的方法。
我认为bind
和bindTo
之间的区别在于它们的命名方式:
$cl->bindTo($obj)
相当于
Closure::bind($cl, $obj)
关于__invoke
方法,这是说该方法存在,但实际上并没有使用。当您将闭包用作函数时,会使用内部(可能更高效)机制来绕过该方法。但是该方法是为了与其他可调用的类兼容,如果需要,可以手动调用它。