PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.8.9
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.8.9
4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 All 200 releases
betterdocs / includes / Dependencies / DI / Invoker / DefinitionParameterResolver.php

DefinitionParameterResolver.php in BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot 3.8.9, at includes/Dependencies/DI/Invoker/DefinitionParameterResolver.php

70 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace WPDeveloper\BetterDocs\Dependencies\DI\Invoker;
6
7 use WPDeveloper\BetterDocs\Dependencies\DI\Definition\Definition;
8 use WPDeveloper\BetterDocs\Dependencies\DI\Definition\Helper\DefinitionHelper;
9 use WPDeveloper\BetterDocs\Dependencies\DI\Definition\Resolver\DefinitionResolver;
10 use WPDeveloper\BetterDocs\Dependencies\Invoker\ParameterResolver\ParameterResolver;
11 use ReflectionFunctionAbstract;
12
13 /**
14 * Resolves callable parameters using definitions.
15 *
16 * @since 5.0
17 * @author Matthieu Napoli <matthieu@mnapoli.fr>
18 */
19 class DefinitionParameterResolver implements ParameterResolver
20 {
21 /**
22 * @var DefinitionResolver
23 */
24 private $definitionResolver;
25
26 public function __construct(DefinitionResolver $definitionResolver)
27 {
28 $this->definitionResolver = $definitionResolver;
29 }
30
31 public function getParameters(
32 ReflectionFunctionAbstract $reflection,
33 array $providedParameters,
34 array $resolvedParameters
35 ) : array {
36 // Skip parameters already resolved
37 if (! empty($resolvedParameters)) {
38 $providedParameters = array_diff_key($providedParameters, $resolvedParameters);
39 }
40
41 foreach ($providedParameters as $key => $value) {
42 if ($value instanceof DefinitionHelper) {
43 $value = $value->getDefinition('');
44 }
45
46 if (! $value instanceof Definition) {
47 continue;
48 }
49
50 $value = $this->definitionResolver->resolve($value);
51
52 if (is_int($key)) {
53 // Indexed by position
54 $resolvedParameters[$key] = $value;
55 } else {
56 // Indexed by parameter name
57 // TODO optimize?
58 $reflectionParameters = $reflection->getParameters();
59 foreach ($reflectionParameters as $reflectionParameter) {
60 if ($key === $reflectionParameter->name) {
61 $resolvedParameters[$reflectionParameter->getPosition()] = $value;
62 }
63 }
64 }
65 }
66
67 return $resolvedParameters;
68 }
69 }
70