这个特性被称为匿名函数,它从 PHP 5.3 开始可用:
匿名函数,也称为闭包,允许创建没有指定名称的函数。它们作为回调参数的值最有用,但它们还有许多其他用途。
他们的范围分辨率也有(轻微的)差异:
闭包也可以从父作用域继承变量。任何此类变量都必须在函数头中声明。从父作用域继承变量与使用全局变量不同。
所以,在这个例子中:
$total = 0.00;
$callback = function ($quantity, $product) use ($tax, &$total)
{
$pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product));
$total += ($pricePerItem * $quantity) * ($tax + 1.0);
};
array_walk($this->products, $callback);
...从该文档页面中,$tax
并且在不使用关键字$total
的情况下有效地注入closure
($callback) 范围。global
匿名函数实际上是Closure类的对象。而且它不仅仅是一个实现特性:因为(从 PHP 5.4 起)这些函数可以使用$this
对象(类似于 JavaScript 中的上下文对象),有一些有用的方法可以改变这个上下文(Closure::bind,Closure::bindTo -例如,将它们与Function.bind进行比较)。
map
更具体地说,在/ -ing 集合时使用匿名函数实际上是一个好习惯filter
,因为这些函数不会进入全局范围。但是,当然,如果您需要您的代码在 PHP 5.2 上运行,这不是一个解决方案。