Completed
Branch traitrefactor (c265e2)
by Joe
02:41
created

trait_traits()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 9
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
3
namespace PhpWinTools\WmiScripting\Support {
4
5
    use PhpWinTools\WmiScripting\Connection;
6
    use PhpWinTools\WmiScripting\Configuration\Config;
7
    use PhpWinTools\WmiScripting\Configuration\Resolver;
8
    use PhpWinTools\WmiScripting\Exceptions\InvalidConnectionException;
9
10
    /**
11
     * @param Config|null $config
12
     *
13
     * @return Config
14
     */
15
    function core(Config $config = null)
16
    {
17
        return $config ?? Config::instance();
18
    }
19
20
    /**
21
     * @param Connection|string|null $connection
22
     * @param Connection|string|null $default
23
     * @param Config|null            $config
24
     *
25
     * @return Connection|string|null
26
     */
27
    function connection($connection = null, $default = null, Config $config = null)
28
    {
29
        if (is_null($connection) && is_null($default)) {
30
            return core($config)->getConnection();
31
        }
32
33
        if (is_string($connection) && trim($connection) !== '') {
34
            $connection = core($config)->getConnection($connection);
35
        }
36
37
        if (!$connection instanceof Connection && $default) {
38
            return connection($default, null, core($config));
39
        }
40
41
        if (!$connection instanceof Connection) {
42
            throw InvalidConnectionException::new($connection);
43
        }
44
45
        return $connection;
46
    }
47
48
    /**
49
     * @param string|null $class
50
     * @param mixed       $parameters
51
     *
52
     * @return Resolver|mixed|null
53
     */
54
    function resolve(string $class = null, ...$parameters)
55
    {
56
        return core()($class, $parameters);
57
    }
58
59
    function class_traits($class)
60
    {
61
        $class = is_object($class) ? get_class($class) : $class;
62
63
        $traits = class_uses($class);
64
65
        while ($class = get_parent_class($class)) {
66
            $traits += class_uses($class);
67
        }
68
69
        $trait_traits = [];
70
71
        foreach ($traits as $trait) {
72
            $trait_traits += trait_traits($trait);
73
        }
74
75
        return array_merge($trait_traits, $traits);
76
    }
77
78
    function trait_traits($trait)
79
    {
80
        $traits = class_uses($trait);
81
82
        foreach ($traits as $trait) {
0 ignored issues
show
introduced by
$trait is overwriting one of the parameters of this function.
Loading history...
83
            $traits += trait_traits($trait);
84
        }
85
86
        return $traits;
87
    }
88
}
89