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 / inc / Dependencies / DI / Definition / Dumper / ObjectDefinitionDumper.php

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

157 lines 4.9 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://php-di.org/
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\Dumper;
11
12 use Cybot\Dependencies\DI\Definition\ObjectDefinition;
13 use Cybot\Dependencies\DI\Definition\ObjectDefinition\MethodInjection;
14 use Cybot\Dependencies\DI\Definition\Definition;
15 use Cybot\Dependencies\DI\Definition\EntryReference;
16 use ReflectionException;
17 use ReflectionMethod;
18
19 /**
20 * Dumps object definitions.
21 *
22 * @since 4.1
23 * @author Matthieu Napoli <[email protected]>
24 */
25 class ObjectDefinitionDumper implements DefinitionDumper
26 {
27 /**
28 * {@inheritdoc}
29 */
30 public function dump(Definition $definition)
31 {
32 if (! $definition instanceof ObjectDefinition) {
33 throw new \InvalidArgumentException(sprintf(
34 'This definition dumper is only compatible with ObjectDefinition objects, %s given',
35 get_class($definition)
36 ));
37 }
38
39 $className = $definition->getClassName();
40 $classExist = class_exists($className) || interface_exists($className);
41
42 // Class
43 if (! $classExist) {
44 $warning = '#UNKNOWN# ';
45 } else {
46 $class = new \ReflectionClass($className);
47 $warning = $class->isInstantiable() ? '' : '#NOT INSTANTIABLE# ';
48 }
49 $str = sprintf(' class = %s%s', $warning, $className);
50
51 // Scope
52 $str .= "\n scope = " . $definition->getScope();
53
54 // Lazy
55 $str .= "\n lazy = " . var_export($definition->isLazy(), true);
56
57 if ($classExist) {
58 // Constructor
59 $str .= $this->dumpConstructor($className, $definition);
60
61 // Properties
62 $str .= $this->dumpProperties($definition);
63
64 // Methods
65 $str .= $this->dumpMethods($className, $definition);
66 }
67
68 return sprintf("Object (\n%s\n)", $str);
69 }
70
71 private function dumpConstructor($className, ObjectDefinition $definition)
72 {
73 $str = '';
74
75 $constructorInjection = $definition->getConstructorInjection();
76
77 if ($constructorInjection !== null) {
78 $parameters = $this->dumpMethodParameters($className, $constructorInjection);
79
80 $str .= sprintf("\n __construct(\n %s\n )", $parameters);
81 }
82
83 return $str;
84 }
85
86 private function dumpProperties(ObjectDefinition $definition)
87 {
88 $str = '';
89
90 foreach ($definition->getPropertyInjections() as $propertyInjection) {
91 $value = $propertyInjection->getValue();
92 if ($value instanceof EntryReference) {
93 $valueStr = sprintf('get(%s)', $value->getName());
94 } else {
95 $valueStr = var_export($value, true);
96 }
97
98 $str .= sprintf("\n $%s = %s", $propertyInjection->getPropertyName(), $valueStr);
99 }
100
101 return $str;
102 }
103
104 private function dumpMethods($className, ObjectDefinition $definition)
105 {
106 $str = '';
107
108 foreach ($definition->getMethodInjections() as $methodInjection) {
109 $parameters = $this->dumpMethodParameters($className, $methodInjection);
110
111 $str .= sprintf("\n %s(\n %s\n )", $methodInjection->getMethodName(), $parameters);
112 }
113
114 return $str;
115 }
116
117 private function dumpMethodParameters($className, MethodInjection $methodInjection)
118 {
119 $methodReflection = new \ReflectionMethod($className, $methodInjection->getMethodName());
120
121 $args = [];
122
123 foreach ($methodReflection->getParameters() as $index => $parameter) {
124 if ($methodInjection->hasParameter($index)) {
125 $value = $methodInjection->getParameter($index);
126
127 if ($value instanceof EntryReference) {
128 $args[] = sprintf('$%s = get(%s)', $parameter->getName(), $value->getName());
129 } else {
130 $args[] = sprintf('$%s = %s', $parameter->getName(), var_export($value, true));
131 }
132 continue;
133 }
134
135 // If the parameter is optional and wasn't specified, we take its default value
136 if ($parameter->isOptional()) {
137 try {
138 $value = $parameter->getDefaultValue();
139
140 $args[] = sprintf(
141 '$%s = (default value) %s',
142 $parameter->getName(),
143 var_export($value, true)
144 );
145 continue;
146 } catch (ReflectionException $e) {
147 // The default value can't be read through Reflection because it is a PHP internal class
148 }
149 }
150
151 $args[] = sprintf('$%s = #UNDEFINED#', $parameter->getName());
152 }
153
154 return implode(PHP_EOL . ' ', $args);
155 }
156 }
157