Completed
Push — master ( db026b...56b106 )
by Oliver
04:09 queued 02:28
created

Composite   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 72.72%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 0
dl 0
loc 63
ccs 16
cts 22
cp 0.7272
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A __invoke() 0 12 3
A attach() 0 4 1
A detach() 0 4 1
A getIterator() 0 4 1
A count() 0 4 1
1
<?php
2
3
namespace Metabor\Callback;
4
5
use MetaborStd\CallbackInterface;
6
7
/**
8
 * @author Oliver Tischlinger
9
 */
10
class Composite implements CallbackInterface, \Countable, \IteratorAggregate
11
{
12
    /**
13
     * @var \SplObjectStorage
14
     */
15
    private $callbacks;
16
17
    /**
18
     *
19
     */
20 1
    public function __construct()
21
    {
22 1
        $this->callbacks = new \SplObjectStorage();
23 1
    }
24
25
    /**
26
     * @see MetaborStd.CallbackInterface::__invoke()
27
     */
28 1
    public function __invoke()
29
    {
30 1
        $args = func_get_args();
31
        /* @var $callback callable */
32 1
        foreach ($this->callbacks as $callback) {
33 1
            if (empty($args)) {
34
                $callback();
35
            } else {
36 1
                call_user_func_array($callback, $args);
37
            }
38 1
        }
39 1
    }
40
41
    /**
42
     * @param CallbackInterface $callback
43
     */
44 1
    public function attach(CallbackInterface $callback)
45
    {
46 1
        $this->callbacks->attach($callback);
47 1
    }
48
49
    /**
50
     * @param CallbackInterface $callback
51
     */
52 1
    public function detach(CallbackInterface $callback)
53
    {
54 1
        $this->callbacks->detach($callback);
55 1
    }
56
57
    /**
58
     * @return \Iterator
59
     */
60
    public function getIterator()
61
    {
62
        return $this->callbacks;
63
    }
64
65
    /**
66
     * @return int
67
     */
68
    public function count()
69
    {
70
        return $this->callbacks->count();
71
    }
72
}
73