ProvidesParameterDi   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 14
c 1
b 0
f 0
dl 0
loc 50
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A resolveDiParameters() 0 13 3
A validateDiParameters() 0 16 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cakasim\Payone\Sdk\Container\Binding;
6
7
use Cakasim\Payone\Sdk\Container\Container;
8
use Cakasim\Payone\Sdk\Container\ContainerException;
9
use ReflectionParameter;
10
11
/**
12
 * This trait adds methods for bindings that use parameter DI.
13
 *
14
 * @author Fabian Böttcher <[email protected]>
15
 * @since 0.1.0
16
 */
17
trait ProvidesParameterDi
18
{
19
    /**
20
     * Checks whether a parameter list is DI compatible.
21
     *
22
     * @param ReflectionParameter[] $parameters The parameter list to check.
23
     * @param array $classes A reference to an array tat will be filled with the parameter class / interface types
24
     * @return bool True if the parameter list is DI compatible.
25
     */
26
    protected function validateDiParameters(array $parameters, array &$classes): bool
27
    {
28
        foreach ($parameters as $parameter) {
29
            // Get class type hint of the parameter,
30
            // null if no such type hint is present.
31
            $parameter = $parameter->getClass();
32
33
            // Return false if the parameter has no class type hint.
34
            if (!$parameter) {
35
                return false;
36
            }
37
38
            $classes[] = $parameter->getName();
39
        }
40
41
        return true;
42
    }
43
44
    /**
45
     * Resolves the provided parameters from the
46
     * provided container.
47
     *
48
     * @param Container $container The container to use for parameter resolving.
49
     * @param string[] $parameters The parameters class / interface types to resolve.
50
     * @return array The resolved parameters.
51
     *
52
     * @throws ContainerException If the resolving fails.
53
     */
54
    protected function resolveDiParameters(Container $container, array $parameters): array
55
    {
56
        $resultParameters = [];
57
58
        try {
59
            foreach ($parameters as $parameter) {
60
                $resultParameters[] = $container->get($parameter);
61
            }
62
        } catch (ContainerException $e) {
63
            throw new ContainerException("Failed resolving of DI parameters.", $e);
64
        }
65
66
        return $resultParameters;
67
    }
68
}
69