PHP 如何给匿名函数赋参数值

How to assign parameter value to anonymous function in PHP

$item 变量如何具有来自 $products

的值
$products = $products->map(function($item){
    $item->getCustomPrices($this->user->client);
    $item->getMarkUpPrices($this->user->client);
    return $item;
});

如果你深入研究 laravel 框架,$products 的类型 Illuminate\Database\Eloquent\Collection. It implements the map method and the underlying implementation 是:

public function map(callable $callback)
{
    $result = parent::map($callback);
    return $result->contains(function ($item) {
        return ! $item instanceof Model;
    }) ? $result->toBase() : $result;
}

Illuminate\Database\Eloquent\Collection 的父 class 是 Illuminate\Support\Collection and the underlying implementation 是:

public function map(callable $callback)
{
    $keys = array_keys($this->items);
    $items = array_map($callback, $this->items, $keys);
    return new static(array_combine($keys, $items));
}

它使用 array_map 方法并将回调函数应用于每个值。

array array_map ( callable $callback , array $array1 [, array $... ] )

一个简单的例子来告诉你如何实现它 https://implode.io/Ce1azD

class Products
{
    protected $items = [];

    public function __construct($items)
    {
        $this->items = $items;
    }

    public function map(callable $callback)
    {
        return array_map($callback, $this->items);
    }
}

$products = new Products([1, 2, 3, 4]);

return $products->map(function ($item) {
    return $item * 2;
});