BindingsScanner::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
/**
3
 * Spiral Framework, IDE Helper
4
 *
5
 * @author    Dmitry Mironov <[email protected]>
6
 * @licence   MIT
7
 */
8
9
namespace Spiral\IdeHelper\Scanners;
10
11
use Spiral\Core\Container;
12
use Spiral\IdeHelper\Model\ClassMember;
13
use Spiral\IdeHelper\Model\ClassProperty;
14
15
/**
16
 * Class BindingsScanner
17
 *
18
 * @package Spiral\IdeHelper\Scanners
19
 */
20
class BindingsScanner
21
{
22
    /**
23
     * @var Container
24
     */
25
    private $container;
26
27
    /**
28
     * BindingsScanner constructor.
29
     *
30
     * @param Container $container
31
     */
32
    public function __construct(Container $container)
33
    {
34
        $this->container = $container;
35
    }
36
37
    /**
38
     * @return ClassMember[]
39
     */
40
    public function scan(): array
41
    {
42
        $properties = [];
43
        $bindings = $this->container->getBindings();
44
45
        foreach ($bindings as $name => $resolver) {
46
            // skip complex things. complex things are bad.
47
            if (is_array($resolver)) {
48
                continue;
49
            }
50
51
            // skip if it's not looks like a short binding
52
            if (lcfirst($name) !== $name || strpos($name, '\\')) {
53
                continue;
54
            }
55
56
            // skip if target class doesn't exists
57
            if (!class_exists($resolver) && !interface_exists($resolver)) {
58
                continue;
59
            }
60
61
            $properties[] = new ClassProperty($name, $resolver);
62
        }
63
64
        return $properties;
65
    }
66
}
67