123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- <?php
- declare(strict_types=1);
- /**
- * This file is part of Hyperf.
- *
- * @link https://www.hyperf.io
- * @document https://hyperf.wiki
- * @contact group@hyperf.io
- * @license https://github.com/hyperf/hyperf/blob/master/LICENSE
- */
- namespace Hyperf\Utils;
- /**
- * @mixin Collection
- * Most of the methods in this file come from illuminate/support,
- * thanks Laravel Team provide such a useful class.
- */
- class HigherOrderCollectionProxy
- {
- /**
- * The collection being operated on.
- *
- * @var Collection
- */
- protected $collection;
- /**
- * The method being proxied.
- *
- * @var string
- */
- protected $method;
- /**
- * Create a new proxy instance.
- */
- public function __construct(Collection $collection, string $method)
- {
- $this->method = $method;
- $this->collection = $collection;
- }
- /**
- * 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);
- });
- }
- }
|