ContainerAccessHelper::hasAccessibleAttribute()   A
last analyzed

Complexity

Conditions 6
Paths 5

Size

Total Lines 18
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 15
c 1
b 0
f 0
nc 5
nop 2
dl 0
loc 18
ccs 15
cts 15
cp 1
crap 6
rs 9.2222
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