如何将use语句用作php

时间:2017-09-06 18:21:51

标签: php

来自documentation

,简单来说我推断出array_reduce将数组作为第一个参数,根据第二个参数中定义的函数进行处理,并迭代结果,直到第一个参数数组的所有值筋疲力尽

但特别是在这个例子中,它采用从getActiveWidgets()返回的数组。直到这里好,什么是使用声明?

$widgets = array_reduce(
            ThemeActiveWidgets::getActiveWidgets(),
            function ($carry, $item) use($model) {
                if ($item['part_id'] === $model['id']) {
                    $carry[]=$item;
                }
                return $carry;
            },
            []
        );

1 个答案:

答案 0 :(得分:1)

我会为你分解一下。

函数array_reduce()接受两个参数,第一个是数组,第二个是函数,在本例中是闭包或anonymous函数。

在您的代码中,您通过调用ThemeActiveWidgets::getActiveWidgets()并将其作为第一个参数传递给array_reduce()来获取数组。作为第二个参数,您传递一个函数,如下所示:

function ($carry, $item) use($model) { ... }

由于这是一个匿名函数,变量$model(无论你在哪里定义)都超出了这个匿名函数的范围,简单来说这意味着你无法访问$model变量在匿名函数内。但是,如果你通过它,你就可以访问它"通过在函数声明中使用use($model)来进入函数的范围。

关于if语句if ($item['part_id'] === $model['id']),您只是访问匿名函数的第二个参数,并将索引['part_id']所拥有的值与$model['id']的值进行比较(也是一个数组)成立。

我希望这个解释有所帮助!