首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在函数中使用关键字- PHP

在函数中使用关键字- PHP
EN

Stack Overflow用户
提问于 2011-06-12 14:25:02
回答 3查看 50.4K关注 0票数 81

可能重复:

In Php 5.3.0 what is the Function “Use” Identifier ? Should a sane programmer use it?

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-12 14:33:11

在这种情况下" use“的用法也是正确的。

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

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

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

票数 116
EN

Stack Overflow用户

发布于 2011-06-12 14:31:39

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

票数 17
EN

Stack Overflow用户

发布于 2011-06-12 14:30:46

这意味着您的内部函数可以使用外部函数中的变量$tax和$total,而不仅仅是它的参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6320521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档