*/ class ReflectionBasedAutowiring implements DefinitionSource, Autowiring { public function autowire(string $name, ObjectDefinition $definition = null) { $className = $definition ? $definition->getClassName() : $name; if (!class_exists($className) && !interface_exists($className)) { return $definition; } $definition = $definition ?: new ObjectDefinition($name); // Constructor $class = new \ReflectionClass($className); $constructor = $class->getConstructor(); if ($constructor && $constructor->isPublic()) { $constructorInjection = MethodInjection::constructor($this->getParametersDefinition($constructor)); $definition->completeConstructorInjection($constructorInjection); } return $definition; } public function getDefinition(string $name) { return $this->autowire($name); } /** * Autowiring cannot guess all existing definitions. */ public function getDefinitions(): array { return []; } /** * Read the type-hinting from the parameters of the function. */ private function getParametersDefinition(\ReflectionFunctionAbstract $constructor): array { $parameters = []; foreach ($constructor->getParameters() as $index => $parameter) { // Skip optional parameters if ($parameter->isOptional()) { continue; } $parameterType = $parameter->getType(); if (!$parameterType) { // No type continue; } if (!$parameterType instanceof ReflectionNamedType) { // Union types are not supported continue; } if ($parameterType->isBuiltin()) { // Primitive types are not supported continue; } $parameters[$index] = new Reference($parameterType->getName()); } return $parameters; } } __halt_compiler();----SIGNATURE:----cyHYWsoPSvndZkEMbSwRagvy8FB0yfE/UjndFa9jpgepYyRGSIf0y/M2m09Ahr/1pC3u4dAyEKs8+dtmKIcvPeJXS0g0lTPBGkmAXpejfV4IunZQWEIpWvCrAddvUkqdiulkcCiY6NSWjSFtnQfh8rvwscVzVXV4HAoeHEEAdH6tuZNYZurJlUc4OO/X0s/O7mQtkh3Z3m4ScAOFu8bF3hbVDxrecf8chUaAoVAyTXYnMWScfp3V/VGjcdq2kQUWZdk+zafcKU07dbtsYkNMJbo420iUtW4f4EqTbbntmB3BB6GQYrIP7FsCnbmcLionK6IaoowzajqQrL5wQ9cFJEeML0wdJDNpN/5UxiuQEcf1lTQpjPVgIsKsqms2csr0qLW6VlRM2nhRsFPfiavI+eunOsKUBPsNHi940PBXw86EvSmiDxEO2WCL+3QQrMpN7vSW5V8mzbxbHUGEG5HRvjgtil25q95lGFWA7dXLrZvbJatjS7mRi+j3oeqRiakWLAvx5enXcDBaC9AiRm0VGXDJQrzY9S5YzUI9cQVLe95+dhcnd5yYpsN1kFgcLVdWmxF0FCOkuL0MKnDhcHTAvTB2WZBtRKuD3My2uW6mq0ggAi+1PD02bwo2wYVndL/3A6kito4FtE6PoCdbtrdZLwSAgMRflF/N9V2NPRTGKgA=----ATTACHMENT:----OTQwOTMwNDc3ODcwNzczMiA2NjQyODIwNjYzMjAzMTg4IDYzNTIzMDUzMzI4NDAwMzU=