HigherOrderCollectionProxy::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 4
rs 10
1
<?php
2
3
namespace MuCTS\Collections;
4
5
use MuCTS\Contracts\Collections\Enumerable;
6
7
/**
8
 * @mixin Enumerable
9
 */
10
class HigherOrderCollectionProxy
11
{
12
    /**
13
     * The collection being operated on.
14
     *
15
     * @var Enumerable
16
     */
17
    protected Enumerable $collection;
18
19
    /**
20
     * The method being proxied.
21
     *
22
     * @var string
23
     */
24
    protected string $method;
25
26
    /**
27
     * Create a new proxy instance.
28
     *
29
     * @param Enumerable $collection
30
     * @param string $method
31
     * @return void
32
     */
33
    public function __construct(Enumerable $collection, $method)
34
    {
35
        $this->method = $method;
36
        $this->collection = $collection;
37
    }
38
39
    /**
40
     * Proxy accessing an attribute onto the collection items.
41
     *
42
     * @param string $key
43
     * @return mixed
44
     */
45
    public function __get($key)
46
    {
47
        return $this->collection->{$this->method}(function ($value) use ($key) {
48
            return is_array($value) ? $value[$key] : $value->{$key};
49
        });
50
    }
51
52
    /**
53
     * Proxy a method call onto the collection items.
54
     *
55
     * @param string $method
56
     * @param array $parameters
57
     * @return mixed
58
     */
59
    public function __call($method, $parameters)
60
    {
61
        return $this->collection->{$this->method}(function ($value) use ($method, $parameters) {
62
            return $value->{$method}(...$parameters);
63
        });
64
    }
65
}
66