Tar*_*rik 72 php closures anonymous-function
我一直在研究PHP中的闭包,这引起了我的注意:
public function getTotal($tax)
{
$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);
return round($total, 2);
}
Run Code Online (Sandbox Code Playgroud)
有人请给我一个关于use
此代码中使用情况的解释.
function ($quantity, $product) use ($tax, &$total)
Run Code Online (Sandbox Code Playgroud)
当我use
在PHP中搜索时,它会找到use
在命名空间中使用的关键字,但在这里它看起来不同.
谢谢.
Fra*_*nes 105
在这种情况下,"使用"的使用也是正确的.
使用闭包,要访问函数上下文之外的变量,您需要使用use函数显式授予函数权限.在这种情况下,它意味着您授予函数访问$ tax和$ total变量的权限.
您会注意到$ tax作为getTotal函数的参数传递,而$ total设置在定义闭包的行的正上方.
另外需要指出的是,$ tax作为副本传递,而$ total通过引用传递(通过在前面附加&符号).通过引用传递允许闭包修改变量的值.在这种情况下,$ tax值的任何变化只会在闭包期间有效,而$ total的实际价值.
hob*_*bbs 15
当你在PHP中声明一个匿名函数时,你需要告诉它应该关闭它周围范围(如果有的话)的哪些变量 - 它们不会自动关闭函数体中提到的任何范围内的词法变量.后面use
的列表只是要关闭的变量列表.