ContainerAccessHelper   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 28
c 1
b 0
f 0
dl 0
loc 49
ccs 27
cts 27
cp 1
rs 10
wmc 11

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getAttributeValue() 0 15 5
A hasAccessibleAttribute() 0 18 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Smoren\Validator\Helpers;
6
7
/**
8
 * @internal
9
 */
10
final class ContainerAccessHelper
11
{
12
    /**
13
     * @param mixed $container
14
     * @param string $attrName
15
     *
16
     * @return bool
17
     */
18 23
    public static function hasAccessibleAttribute($container, string $attrName): bool
19
    {
20 23
        $result = false;
21
        switch (true) {
22 23
            case \is_array($container):
23 13
                $result = \array_key_exists($attrName, $container);
24 13
                break;
25 12
            case $container instanceof \ArrayAccess:
26 2
                $result = $container->offsetExists($attrName);
27 2
                break;
28 10
            case $container instanceof \stdClass:
29 5
                $result = \property_exists($container, $attrName);
30 5
                break;
31 5
            case \is_object($container) && \property_exists($container, $attrName):
32 4
                $result = (new \ReflectionClass($container))->getProperty($attrName)->isPublic();
33 4
                break;
34
        }
35 23
        return $result;
36
    }
37
38
    /**
39
     * @param mixed $container
40
     * @param string $attrName
41
     *
42
     * @return mixed|null
43
     */
44 14
    public static function getAttributeValue($container, string $attrName)
45
    {
46 14
        $result = null;
47
        switch (true) {
48 14
            case \is_array($container):
49 8
                $result = $container[$attrName];
50 8
                break;
51 7
            case $container instanceof \ArrayAccess:
52 1
                $result = $container->offsetGet($attrName);
53 1
                break;
54 6
            case \is_object($container) && \property_exists($container, $attrName):
55 6
                $result = $container->{$attrName};
56 6
                break;
57
        }
58 14
        return $result;
59
    }
60
}
61