Skip to content

Commit

Permalink
php8-mod: Optimize compiled factory definitions
Browse files Browse the repository at this point in the history
  • Loading branch information
partikus committed Jan 13, 2023
1 parent 48bf3bb commit 2c70d32
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions src/Compiler/Compiler.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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);',
Expand Down Expand Up @@ -440,7 +438,7 @@ public function resolveFactoryParameters(
array $definitionParameters = [],
array $parametersByClassName = [],
array $defaultParameters = []
) {
) : array {
$resolvedParameters = [];
$parameters = $reflection->getParameters();

Expand All @@ -451,19 +449,20 @@ 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];
}
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);
}
}

Expand Down

0 comments on commit 2c70d32

Please sign in to comment.