$collection the collection being operated on * @param string $method the method being proxied */ public function __construct(protected Enumerable $collection, protected string $method) { } /** * Proxy accessing an attribute onto the collection items. */ public function __get(string $key) { return $this->collection->{$this->method}(function ($value) use ($key) { return is_array($value) ? $value[$key] : $value->{$key}; }); } /** * Proxy a method call onto the collection items. */ public function __call(string $method, array $parameters) { return $this->collection->{$this->method}(function ($value) use ($method, $parameters) { return $value->{$method}(...$parameters); }); } }