在函数中使用关键字 - PHP

2022-08-30 08:15:17

可能的重复:
在 Php 5.3.0 中,函数“Use”标识符是什么?一个理智的程序员应该使用它吗?

我一直在研究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中搜索时,它会在命名空间中使用关键字,但在这里它看起来不同。useuse

谢谢。


答案 1

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

使用闭包,要访问函数上下文之外的变量,您需要使用 use 函数显式授予函数权限。在这种情况下,这意味着您授予函数对$tax和$total变量的访问权限。

您会注意到,$tax作为 getTotal 函数的参数传递,而$total设置在定义闭包的行的正上方。

另一件需要指出的事情是,$tax作为副本传递,而$total则通过引用传递(通过在前面附加&sign)。通过引用传递允许闭包修改变量的值。在这种情况下,对$tax值的任何更改仅在闭合内有效,而$total的实际值。


答案 2

当你在PHP中声明一个匿名函数时,你需要告诉它应该关闭周围作用域中的哪些变量(如果有的话)——它们不会自动关闭函数体中提到的任何作用域内词法变量。之后的列表只是要关闭的变量列表。use


推荐