为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
千巷猫影 2019-06-24 15:20:19
在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);}的例子之一匿名函数.有人知道这件事吗?有文件吗?它看起来很邪恶,它应该被使用吗?
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

PHP就是这样表示封闭..这根本不是邪恶,事实上,它是相当强大和有用的。

基本上,这意味着允许匿名函数“捕获”局部变量(在本例中,$tax以及引用$total)在其范围之外并保存它们的值(或在以下情况下)$total引用$total)作为匿名函数本身内的状态。


查看完整回答
反对 回复 2019-06-24
?
潇湘沐

TA贡献1816条经验 获得超6个赞

一个简单的答案。

function ($quantity) use ($tax, &$total) { .. };

  1. 闭包是分配给变量的函数,因此您可以传递它。
  2. 闭包是一个单独的名称空间,通常不能访问此命名空间之外定义的变量。来了

    使用

    关键词:
  3. 使用

    允许您访问(使用)闭包内的后续变量。
  4. 使用

    是早期绑定。这意味着变量值是在定义闭包时复制的。所以修改

    $tax

    在闭包内部没有外部效果,除非它是指针,就像对象一样。
  5. 您可以将变量作为指针传入,如

    &$total

    ..这样,修改

    $total

    确实有外部影响,原始变量的值会发生变化。
  6. 在闭包内定义的变量也不能从闭包外部访问。
  7. 闭包和函数具有相同的速度。是的,你可以在你的脚本中全部使用它们。

@Mytskine指出也许最好的深入解释是用于闭包的RFC..(请投票给他。)


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 498 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信