Completed
Push — traitrefactor ( c265e2...7d4158 )
by Joe
03:49
created

class_has_trait()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 2
nc 1
nop 2
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
    /**
60
     * Expects either a class name or instance and will return if the given trait exists on the class.
61
     *
62
     * @param $class
63
     * @param $trait
64
     *
65
     * @return bool
66
     */
67
    function class_has_trait($class, $trait): bool
68
    {
69
        return array_key_exists($trait, class_traits(is_object($class) ? get_class($class) : $class));
70
    }
71
72
    /**
73
     * Returns all traits of the given class or instance. It also checks the traits for any used traits.
74
     *
75
     * @param $class
76
     * @return array
77
     */
78
    function class_traits($class)
79
    {
80
        $class = is_object($class) ? get_class($class) : $class;
81
82
        $traits = class_uses($class);
83
84
        while ($class = get_parent_class($class)) {
85
            $traits += class_uses($class);
86
        }
87
88
        $trait_traits = [];
89
90
        foreach ($traits as $trait) {
91
            $trait_traits += trait_traits($trait);
92
        }
93
94
        return array_merge($trait_traits, $traits);
95
    }
96
97
    /**
98
     * Returns all of the traits that a trait uses including it's ancestors.
99
     *
100
     * @param $trait
101
     * @return array
102
     */
103
    function trait_traits($trait)
104
    {
105
        $traits = class_uses($trait);
106
107
        foreach ($traits as $trait) {
0 ignored issues
show
introduced by
$trait is overwriting one of the parameters of this function.
Loading history...
108
            $traits += trait_traits($trait);
109
        }
110
111
        return $traits;
112
    }
113
}
114