在PHP中,什么是闭包,为什么使用“use”标识符?

我正在查看一些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){..}

  1. 闭包是分配给变量的函数,因此可以传递它
  2. 闭包是一个单独的名称空间,通常不能访问在此名称空间之外定义的变量。出现了使用关键字:
  3. 使用允许您访问(使用)闭包中的后续变量
  4. 使用是早期绑定。这意味着在定义闭包时复制变量值。因此,在闭包内修改$tax不会产生任何外部效果,除非它是指针,就像对象一样
  5. 您可以像在的情况下那样,将变量作为指针传入&amp$总计。这样,修改$total的值确实会产生外部影响,原始变量的值会发生更改
  6. 在闭包内部定义的变量也不能从闭包外部访问
  7. 闭包和函数具有相同的速度。是的,您可以在所有脚本中使用它们

正如@Mytskine所指出的,最好的深入解释可能是闭包的RFC。(请投他的票。)

发表评论