在函数中使用关键字 – PHP

可能重复:
在Php 5.3.0什么是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); } 

有人请给我一个关于在这个代码中use的解释。

 function ($quantity, $product) use ($tax, &$total) 

当我在PHP中search时,它use关键字在命名空间中use它,但在这里看起来不同。

谢谢。

在这种情况下使用“使用”也是正确的。

使用闭包,要访问函数上下文之外的variables,需要使用use函数明确授予函数的权限。 在这种情况下意味着你​​正在授予对$ tax和$ totalvariables的访问权限。

你会注意到$ tax是作为getTotal函数的parameter passing的,而$ total被设置在closures被定义的行的上方。

另一件要指出的是,$ tax作为副本传递,而$ total通过引用传递(通过在前面附加“&”符号)。 按引用传递允许闭包修改variables的值。 在这种情况下,任何税收价值的变化只有在closures时才有效,而实际价值总和。

当你在PHP中声明了一个匿名函数时,你需要告诉它它周围哪些variables(如果有的话)应该closures – 它们不会自动closures函数体中提到的任何范围内的词法variables。 use后的列表只是要closures的variables列表。

这意味着你的内部函数可以使用来自外部函数的variables$ tax和$ total,而不仅仅是它的参数。