我正在查看一些PHP5.3.0功能,并在网站上运行了一些看起来很有趣的代码:
公共函数getTotal($tax)
{
$total=0.00;
$callback=
/*这一行在这里:*/
功能($quantity,$product)使用($tax,&;total)
{
$pricePerItem=常数(_类::PRICE)。
strotupper($产品));
$total+=($pricePerItem*$quantity)*($tax+1.0);
};
数组_walk($this->;products,$callback);
返回轮(共计2美元);
}
作为匿名函数的示例之一
有人知道这件事吗?有文件吗?它看起来很邪恶,应该被使用吗
一个更简单的答案
函数($quantity)使用($tax,&;total){..}
- 闭包是分配给变量的函数,因此可以传递它
- 闭包是一个单独的名称空间,通常不能访问在此名称空间之外定义的变量。出现了使用关键字:
- 使用允许您访问(使用)闭包中的后续变量
- 使用是早期绑定。这意味着在定义闭包时复制变量值。因此,在闭包内修改
$tax不会产生任何外部效果,除非它是指针,就像对象一样 - 您可以像在
的情况下那样,将变量作为指针传入&$总计。这样,修改$total的值确实会产生外部影响,原始变量的值会发生更改 - 在闭包内部定义的变量也不能从闭包外部访问
- 闭包和函数具有相同的速度。是的,您可以在所有脚本中使用它们
正如@Mytskine所指出的,最好的深入解释可能是闭包的RFC。(请投他的票。)