HigherOrderCollectionProxy.php
TLDR
This file contains the implementation of the HigherOrderCollectionProxy
class, which is a proxy for accessing attributes and calling methods on items in a collection.
Classes
HigherOrderCollectionProxy
This class is a proxy for accessing attributes and calling methods on items in a collection. It has the following properties:
-
$collection
: The collection being operated on. -
$method
: The method being proxied.
The class has the following methods:
-
__construct($collection, $method)
: Initializes a new proxy instance with the given collection and method. -
__get($key)
: Proxies accessing an attribute onto the collection items. -
__call($method, $parameters)
: Proxies a method call onto the collection items.
<?php
namespace Illuminate\Support;
/**
* @mixin \Illuminate\Support\Enumerable
*/
class HigherOrderCollectionProxy
{
/**
* The collection being operated on.
*
* @var \Illuminate\Support\Enumerable
*/
protected $collection;
/**
* The method being proxied.
*
* @var string
*/
protected $method;
/**
* Create a new proxy instance.
*
* @param \Illuminate\Support\Enumerable $collection
* @param string $method
* @return void
*/
public function __construct(Enumerable $collection, $method)
{
$this->method = $method;
$this->collection = $collection;
}
/**
* Proxy accessing an attribute onto the collection items.
*
* @param string $key
* @return mixed
*/
public function __get($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.
*
* @param string $method
* @param array $parameters
* @return mixed
*/
public function __call($method, $parameters)
{
return $this->collection->{$this->method}(function ($value) use ($method, $parameters) {
return $value->{$method}(...$parameters);
});
}
}