Completed
Push — trunk ( c7e339...34029c )
by SuperNova.WS
04:10
created

Hooker::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 2
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by Gorlum 18.03.2018 16:31
4
 */
5
6
namespace Common\Hooker;
7
8
class Hooker {
9
  /**
10
   * @var Pimp $pimp
11
   */
12
  protected $pimp;
13
14
  /**
15
   * @var callable[][] $clients
16
   */
17
  protected $clients;
18
19
  /**
20
   * Hooker constructor.
21
   *
22
   * @param Pimp $pimp
23
   */
24 1
  public function __construct($pimp) {
25 1
    $this->pimp = $pimp;
26 1
  }
27
28
  /**
29
   * @param callable $callable
30
   * @param int      $order
31
   */
32 1
  public function addClient($callable, $order = Pimp::ORDER_AS_IS) {
33
    // TODO - override
34
35 1
    if (empty($this->clients[$order])) {
36 1
      $this->clients[$order] = [];
37
38
      // Rearranging by order
39 1
      asort($this->clients);
40 1
    }
41
42 1
    $this->clients[$order][] = $callable;
43 1
  }
44
45
  /**
46
   * @param array|mixed $arguments
47
   *
48
   * @return null|mixed
49
   */
50 1
  public function serve($arguments) {
51 1
    $result = null;
52
53 1
    if (!is_array($arguments)) {
54 1
      $arguments = [$arguments];
55 1
    }
56
    // Adding link to $result
57 1
    $arguments = array_merge([&$result], $arguments);
58 1
    if (!empty($this->clients)) {
59 1
      foreach ($this->clients as $order => $callables) {
60 1
        foreach ($callables as $callable) {
61 1
          if (is_callable($callable)) {
62 1
            $result = call_user_func_array($callable, $arguments);
63 1
          }
64 1
        }
65 1
      }
66 1
    }
67
68 1
    return $result;
69
  }
70
71
  /**
72
   * Alias for $this->serve()
73
   *
74
   * @return mixed|null
75
   * @see Hooker::serve()
76
   */
77 1
  public function __invoke() {
78
    // Why it's returns array of params???? Dirty hack here
79 1
    return $this->serve(func_get_args()[0]);
80
  }
81
82
}
83