PHP, The Closure class


PHP, The Closure class

我正在努力了解闭包类,在手册中,所有在手动链接,

闭包:__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是一种神奇的方法。

我认为bindbindTo之间的区别在于它们的命名方式:

$cl->bindTo($obj)

相当于

Closure::bind($cl, $obj)

关于__invoke方法,这是说该方法存在,但实际上并没有使用。当您将闭包用作函数时,会使用内部(可能更高效)机制来绕过该方法。但是该方法是为了与其他可调用的类兼容,如果需要,可以手动调用它。