From 2c70d32567bf3d925ea1e76def2e2402d876edb1 Mon Sep 17 00:00:00 2001 From: Michal Kruczek Date: Fri, 13 Jan 2023 15:34:56 +0100 Subject: [PATCH] php8-mod: Optimize compiled factory definitions --- src/Compiler/Compiler.php | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Compiler/Compiler.php b/src/Compiler/Compiler.php index dc4f70b2..d6947c0d 100644 --- a/src/Compiler/Compiler.php +++ b/src/Compiler/Compiler.php @@ -23,12 +23,12 @@ use function file_put_contents; use InvalidArgumentException; use Laravel\SerializableClosure\Support\ReflectionClosure; +use ReflectionFunction; +use ReflectionFunctionAbstract; use function rename; use function sprintf; use function tempnam; use function unlink; -use ReflectionFunction; -use ReflectionFunctionAbstract; /** * Compiles the container into PHP code much more optimized for performances. @@ -294,9 +294,7 @@ private function compileDefinition(string $entryName, Definition $definition) : $defaultParameters ); - $definitionParameters = array_map(function ($value) { - return $this->compileValue($value); - }, $resolvedParameters); + $definitionParameters = array_map(fn ($value) => $this->compileValue($value), $resolvedParameters); $code = sprintf( 'return (%s)(%s);', @@ -440,7 +438,7 @@ public function resolveFactoryParameters( array $definitionParameters = [], array $parametersByClassName = [], array $defaultParameters = [] - ) { + ) : array { $resolvedParameters = []; $parameters = $reflection->getParameters(); @@ -451,8 +449,8 @@ public function resolveFactoryParameters( continue; } - $parameterClass = $parameter->getClass(); - if (!$parameterClass) { + $parameterType = $parameter->getType(); + if (!$parameterType) { if (array_key_exists($index, $defaultParameters)) { // take default parameters, when no typehint $resolvedParameters[$index] = $defaultParameters[$index]; @@ -460,10 +458,11 @@ public function resolveFactoryParameters( continue; } - if (isset($parametersByClassName[$parameterClass->name])) { - $resolvedParameters[$index] = $parametersByClassName[$parameterClass->name]; + $parameterTypeName = $parameterType->getName(); + if (isset($parametersByClassName[$parameterTypeName])) { + $resolvedParameters[$index] = $parametersByClassName[$parameterTypeName]; } else { - $resolvedParameters[$index] = new Reference($parameterClass->name); + $resolvedParameters[$index] = new Reference($parameterTypeName); } }