我正在查看大约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);
}

作为anonymous functions的例子之一.

有人知道这件事吗?有什么文件吗?而且它看起来很邪恶,应该用吗?

推荐答案

这就是PHP表达closure的方式.这一点都不邪恶,事实上它非常强大和有用.

基本上,这意味着您允许匿名函数在其作用域之外"捕获"局部变量(在本例中为$tax和对$total的引用),并将其值(或在$total中为对$total本身的引用)保留为匿名函数本身内的状态.

Php相关问答推荐

shell_exec()在后台执行nohup时不会立即返回

PHPHPML用现有的HTML文件上的文本替换 node 值

发送给WooCommerce中相关产品作者的通知新订单的邮箱

WooCommerce产品按特定元数据的自定义数字排序选项

在WooCommerce中禁用特定日期之前的免费送货

如何删除Foreach语句中的重复值?

Laravel:测试命令时无法获取工作通知::AssertSentTo

首先在WooCommerce我的帐户订单页面中移动操作按钮

如何按类别过滤自定义帖子类型

为什么PHP PDO忽略NOT NULL约束?

Filament v3:具有 hasMany 和 BelongsTo 的关系管理器

PHP 8.2 弃用日志(log)存储在 Laravel 10.22.0 中的哪里?

当我激活插件时出现错误注意:未定义的偏移量:1

在 vue 自定义渲染器中访问变量

基于WooCommerce中的产品变体自定义感谢页面跳转

在WooCommerce购物车和 checkout 页面中更改总计文本

PHP preg_replace括号和方括号内的所有逗号

我需要获取传递到这个数组中的数据,但我没有得到它,因为在 Laravel 中数组是这样出现的

如何限制for循环php中的条目数

使用 splat 运算符时按引用传递 (...)