PluginProbe
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 3.11.1
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v3.11.1
4.7.4 4.7.5 4.7.3 4.7.2 4.7.1 trunk 2.3.0 2.4.0 2.4.1 2.4.2 2.5.0 3.0.0 3.0.1 3.1.0 3.10.0 3.10.1 3.11.1 3.11.2 3.11.3 3.2.0 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 All 95 releases
cookiebot / addons / lib / ioc / php-di / invoker / src / ParameterResolver / ResolverChain.php

ResolverChain.php in Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode 3.11.1, at addons/lib/ioc/php-di/invoker/src/ParameterResolver/ResolverChain.php

70 lines 1.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Invoker\ParameterResolver;
4
5 use ReflectionFunctionAbstract;
6
7 /**
8 * Dispatches the call to other resolvers until all parameters are resolved.
9 *
10 * Chain of responsibility pattern.
11 *
12 * @author Matthieu Napoli <[email protected]>
13 */
14 class ResolverChain implements ParameterResolver
15 {
16 /**
17 * @var ParameterResolver[]
18 */
19 private $resolvers = array();
20
21 public function __construct(array $resolvers = array())
22 {
23 $this->resolvers = $resolvers;
24 }
25
26 public function getParameters(
27 ReflectionFunctionAbstract $reflection,
28 array $providedParameters,
29 array $resolvedParameters
30 ) {
31 $reflectionParameters = $reflection->getParameters();
32
33 foreach ($this->resolvers as $resolver) {
34 $resolvedParameters = $resolver->getParameters(
35 $reflection,
36 $providedParameters,
37 $resolvedParameters
38 );
39
40 $diff = array_diff_key($reflectionParameters, $resolvedParameters);
41 if (empty($diff)) {
42 // Stop traversing: all parameters are resolved
43 return $resolvedParameters;
44 }
45 }
46
47 return $resolvedParameters;
48 }
49
50 /**
51 * Push a parameter resolver after the ones already registered.
52 *
53 * @param ParameterResolver $resolver
54 */
55 public function appendResolver(ParameterResolver $resolver)
56 {
57 $this->resolvers[] = $resolver;
58 }
59
60 /**
61 * Insert a parameter resolver before the ones already registered.
62 *
63 * @param ParameterResolver $resolver
64 */
65 public function prependResolver(ParameterResolver $resolver)
66 {
67 array_unshift($this->resolvers, $resolver);
68 }
69 }
70