1

我找到了这样的代码,但找不到它的作用

$callback = function ($pricePerItem) use ($tax, &$total) {
    $total += $pricePerItem * ($tax + 1.0);
};

php文档只说

'use' 关键字也适用于闭包结构:

但没有解释它实际上做了什么。

4

2 回答 2

3

它控制范围。在这种情况下,变量$tax$total在匿名函数之外声明。因为它们列在 use 子句中,所以可以从内部访问它们。

& 符号使变量完全共享 - 例如,在闭包内所做的更改将反映在外部范围中。在 的情况下$tax,变量是一个副本,因此不能在闭包内更改。

大多数支持匿名函数的其他语言默认只有词法范围,但由于 PHP 已经有其他范围规则,这会产生各种奇怪的情况,破坏向后兼容性。作为一种手段,这个 - 相当尴尬 - 解决方案已经到位。

于 2012-05-07T07:58:57.363 回答
1

检查这个 - http://php.net/manual/en/functions.anonymous.php,如果匿名函数想要使用局部变量(对于您的代码,它是$taxand $total),它应该use用来引用它们。

于 2012-05-07T08:08:36.960 回答