Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php declare(strict_types=1);
2
 
3
namespace Invoker\ParameterResolver;
4
 
5
use ReflectionException;
6
use ReflectionFunctionAbstract;
7
 
8
/**
9
 * Finds the default value for a parameter, *if it exists*.
10
 */
11
class DefaultValueResolver implements ParameterResolver
12
{
13
    public function getParameters(
14
        ReflectionFunctionAbstract $reflection,
15
        array $providedParameters,
16
        array $resolvedParameters
17
    ): array {
18
        $parameters = $reflection->getParameters();
19
 
20
        // Skip parameters already resolved
21
        if (! empty($resolvedParameters)) {
22
            $parameters = array_diff_key($parameters, $resolvedParameters);
23
        }
24
 
25
        foreach ($parameters as $index => $parameter) {
26
            \assert($parameter instanceof \ReflectionParameter);
27
            if ($parameter->isDefaultValueAvailable()) {
28
                try {
29
                    $resolvedParameters[$index] = $parameter->getDefaultValue();
30
                } catch (ReflectionException $e) {
31
                    // Can't get default values from PHP internal classes and functions
32
                }
33
            } else {
34
                $parameterType = $parameter->getType();
35
                if ($parameterType && $parameterType->allowsNull()) {
36
                    $resolvedParameters[$index] = null;
37
                }
38
            }
39
        }
40
 
41
        return $resolvedParameters;
42
    }
43
}