在PHP中,什么是闭包,为什么它使用“use”标识符?

在PHP中,什么是闭包,为什么它使用“use”标识符?

我在查一些PHP 5.3.0功能并在网站上看到一些看起来很有趣的代码:

public function getTotal($tax){
    $total = 0.00;

    $callback =
        /* This line here: */
        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);}

的例子之一匿名函数.

有人知道这件事吗?有文件吗?它看起来很邪恶,它应该被使用吗?


千巷猫影
浏览 499回答 3
3回答

哈士奇WWW

PHP就是这样表示封闭..这根本不是邪恶,事实上,它是相当强大和有用的。基本上,这意味着允许匿名函数“捕获”局部变量(在本例中,$tax以及引用$total)在其范围之外并保存它们的值(或在以下情况下)$total引用$total)作为匿名函数本身内的状态。

潇湘沐

一个简单的答案。function ($quantity) use ($tax, &$total) { .. };闭包是分配给变量的函数,因此您可以传递它。闭包是一个单独的名称空间,通常不能访问此命名空间之外定义的变量。来了使用关键词:使用允许您访问(使用)闭包内的后续变量。使用是早期绑定。这意味着变量值是在定义闭包时复制的。所以修改$tax在闭包内部没有外部效果,除非它是指针,就像对象一样。您可以将变量作为指针传入,如&$total..这样,修改$total确实有外部影响,原始变量的值会发生变化。在闭包内定义的变量也不能从闭包外部访问。闭包和函数具有相同的速度。是的,你可以在你的脚本中全部使用它们。@Mytskine指出也许最好的深入解释是用于闭包的RFC..(请投票给他。)
打开App,查看更多内容
随时随地看视频慕课网APP