*/ class ObjectDefinitionDumper { /** * Returns the definition as string representation. */ public function dump(ObjectDefinition $definition): string { $className = $definition->getClassName(); $classExist = class_exists($className) || interface_exists($className); // Class if (! $classExist) { $warning = '#UNKNOWN# '; } else { $class = new \ReflectionClass($className); $warning = $class->isInstantiable() ? '' : '#NOT INSTANTIABLE# '; } $str = sprintf(' class = %s%s', $warning, $className); // Lazy $str .= \PHP_EOL . ' lazy = ' . var_export($definition->isLazy(), true); if ($classExist) { // Constructor $str .= $this->dumpConstructor($className, $definition); // Properties $str .= $this->dumpProperties($definition); // Methods $str .= $this->dumpMethods($className, $definition); } return sprintf('Object (' . \PHP_EOL . '%s' . \PHP_EOL . ')', $str); } /** * @param class-string $className */ private function dumpConstructor(string $className, ObjectDefinition $definition): string { $str = ''; $constructorInjection = $definition->getConstructorInjection(); if ($constructorInjection !== null) { $parameters = $this->dumpMethodParameters($className, $constructorInjection); $str .= sprintf(\PHP_EOL . ' __construct(' . \PHP_EOL . ' %s' . \PHP_EOL . ' )', $parameters); } return $str; } private function dumpProperties(ObjectDefinition $definition): string { $str = ''; foreach ($definition->getPropertyInjections() as $propertyInjection) { $value = $propertyInjection->getValue(); $valueStr = $value instanceof Definition ? (string) $value : var_export($value, true); $str .= sprintf(\PHP_EOL . ' $%s = %s', $propertyInjection->getPropertyName(), $valueStr); } return $str; } /** * @param class-string $className */ private function dumpMethods(string $className, ObjectDefinition $definition): string { $str = ''; foreach ($definition->getMethodInjections() as $methodInjection) { $parameters = $this->dumpMethodParameters($className, $methodInjection); $str .= sprintf(\PHP_EOL . ' %s(' . \PHP_EOL . ' %s' . \PHP_EOL . ' )', $methodInjection->getMethodName(), $parameters); } return $str; } /** * @param class-string $className */ private function dumpMethodParameters(string $className, MethodInjection $methodInjection): string { $methodReflection = new \ReflectionMethod($className, $methodInjection->getMethodName()); $args = []; $definitionParameters = $methodInjection->getParameters(); foreach ($methodReflection->getParameters() as $index => $parameter) { if (array_key_exists($index, $definitionParameters)) { $value = $definitionParameters[$index]; $valueStr = $value instanceof Definition ? (string) $value : var_export($value, true); $args[] = sprintf('$%s = %s', $parameter->getName(), $valueStr); continue; } // If the parameter is optional and wasn't specified, we take its default value if ($parameter->isOptional()) { try { $value = $parameter->getDefaultValue(); $args[] = sprintf( '$%s = (default value) %s', $parameter->getName(), var_export($value, true) ); continue; } catch (ReflectionException) { // The default value can't be read through Reflection because it is a PHP internal class } } $args[] = sprintf('$%s = #UNDEFINED#', $parameter->getName()); } return implode(\PHP_EOL . ' ', $args); } }__halt_compiler();----SIGNATURE:----EEfLsq8gYbflkzRMOXuSy2LB3bAWM7N01+iBi5btyR+DFEHsEHvuMKdcUdVmpX/P/IGf/GcNBR+ICTrFk3qUb9rnV3Lx19U8mEECPSDyrVinjG2t9Xd7YrJO+E+zSBRPNpwSRgr5ccLKpVHSnAoIpNxD4moDg8xvKcxJv/sEUklL32kIsCvExMo/i52KoWouTupeLcs+aY8YVjftsgrx1GgV2TqV1z8vI5nx8cgLmxdIhGU0rqLfslrGgR+jKeNuCyyWal1kp9HhMrNMYu7XejbSVwOmDCQXyLJ6itLZetPvqunNvyWsY3a0GWt4aVKVoxzs7hhJE/BCO3WBxYMcK05O7CsjjS/6jxzdmF9LgTjQwm+XnG5ULoA1kfFybPK3bsD6OCTY4KnXFmCmpznuXz/JbWm2JfdS9X0F3Z65vZwgENbl5fv5uMaHQ09CTcQOlt2MsS+pYJVG1/BNOoHRkTJNrN17kGqA3l4X2mdJ5BmFgaNX7djdJaRf3Mf2YFXEz0vbZEI7HUI6MXWtHY8hAN4PTh6yKcLYZ2TE9xYFQHyHmCi4QwpRDgYWYPaI0FX0qNSp7ktFoNhXiVmaTPGEdMXz8D4phmVeSRpYCDbDVATqZLU0YYVTTn2zz7Up+LA+MCtqMEr80ZypsuzZLOQHupCXoqv//QtwtC5R15/4XZY=----ATTACHMENT:----OTMyOTc0NTY0NzIxOTE0NCA0NjE1MzE2MzYwNDk4ODkxIDEyNjk1NDE1NDU4NTg4MTY=