PluginProbe
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 3.10.1
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v3.10.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 / inc / Dependencies / DI / Definition / Resolver / FactoryResolver.php

FactoryResolver.php in Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode 3.10.1, at addons/inc/Dependencies/DI/Definition/Resolver/FactoryResolver.php

86 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * PHP-DI
4 *
5 * @link http://mnapoli.github.com/PHP-DI/
6 * @copyright Matthieu Napoli (http://mnapoli.fr/)
7 * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
8 */
9
10 namespace Cybot\Dependencies\DI\Definition\Resolver;
11
12 use Cybot\Dependencies\DI\Definition\Exception\DefinitionException;
13 use Cybot\Dependencies\DI\Definition\FactoryDefinition;
14 use Cybot\Dependencies\DI\Definition\Definition;
15 use Cybot\Dependencies\Interop\Container\ContainerInterface;
16
17 /**
18 * Resolves a factory definition to a value.
19 *
20 * @since 4.0
21 * @author Matthieu Napoli <[email protected]>
22 */
23 class FactoryResolver implements DefinitionResolver
24 {
25 /**
26 * @var ContainerInterface
27 */
28 private $container;
29
30 /**
31 * The resolver needs a container. This container will be passed to the factory as a parameter
32 * so that the factory can access other entries of the container.
33 *
34 * @param ContainerInterface $container
35 */
36 public function __construct(ContainerInterface $container)
37 {
38 $this->container = $container;
39 }
40
41 /**
42 * Resolve a factory definition to a value.
43 *
44 * This will call the callable of the definition.
45 *
46 * @param FactoryDefinition $definition
47 *
48 * {@inheritdoc}
49 */
50 public function resolve(Definition $definition, array $parameters = [])
51 {
52 $this->assertIsFactoryDefinition($definition);
53
54 $callable = $definition->getCallable();
55
56 if (! is_callable($callable)) {
57 throw new DefinitionException(sprintf(
58 'The factory definition "%s" is not callable',
59 $definition->getName()
60 ));
61 }
62
63 return call_user_func($callable, $this->container);
64 }
65
66 /**
67 * {@inheritdoc}
68 */
69 public function isResolvable(Definition $definition, array $parameters = [])
70 {
71 $this->assertIsFactoryDefinition($definition);
72
73 return true;
74 }
75
76 private function assertIsFactoryDefinition(Definition $definition)
77 {
78 if (!$definition instanceof FactoryDefinition) {
79 throw new \InvalidArgumentException(sprintf(
80 'This definition resolver is only compatible with FactoryDefinition objects, %s given',
81 get_class($definition)
82 ));
83 }
84 }
85 }
86