PluginProbe ʕ •ᴥ•ʔ
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode / 3.11.3
Cookiebot by Usercentrics – Automatic Cookie Banner for GDPR/CCPA & Google Consent Mode v3.11.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 3.5.0 3.6.0 3.6.1 3.6.2 3.6.5 3.6.6 3.7.0 3.7.1 3.8.0 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.2.0 4.2.1 4.2.10 4.2.11 4.2.12 4.2.13 4.2.14 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.3.10 4.3.11 4.3.12 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.7.1 4.3.8 4.3.9 4.3.9.1 4.4.0 4.4.1 4.4.2 4.5.0 4.5.1 4.5.10 4.5.11 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.5.8 4.5.9 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.7.0
cookiebot / addons / inc / Dependencies / DI / Definition / Dumper / ObjectDefinitionDumper.php
cookiebot / addons / inc / Dependencies / DI / Definition / Dumper Last commit date
AliasDefinitionDumper.php 5 years ago ArrayDefinitionDumper.php 5 years ago DecoratorDefinitionDumper.php 5 years ago DefinitionDumper.php 5 years ago DefinitionDumperDispatcher.php 5 years ago EnvironmentVariableDefinitionDumper.php 5 years ago FactoryDefinitionDumper.php 5 years ago ObjectDefinitionDumper.php 5 years ago StringDefinitionDumper.php 5 years ago ValueDefinitionDumper.php 5 years ago
ObjectDefinitionDumper.php
157 lines
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 <matthieu@mnapoli.fr>
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