From 6c422d0185601357222edce1aa2e219b10267af1 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Thu, 14 Dec 2023 13:12:27 +0100 Subject: [PATCH] Resolver::autowireArgument() fixed handling of new-initializer with typehint [Closes #302] --- src/DI/Resolver.php | 2 +- tests/DI/Resolver.autowireArguments.81.phpt | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/DI/Resolver.php b/src/DI/Resolver.php index b62550dde..3a46408f1 100644 --- a/src/DI/Resolver.php +++ b/src/DI/Resolver.php @@ -642,7 +642,7 @@ private static function autowireArgument(\ReflectionParameter $parameter, callab throw new ServiceCreationException("{$e->getMessage()} (required by $desc)", 0, $e); } - if ($res !== null || $parameter->allowsNull()) { + if ($res !== null || $parameter->allowsNull() || $parameter->isOptional()) { return $res; } elseif (class_exists($class) || interface_exists($class)) { throw new ServiceCreationException(sprintf( diff --git a/tests/DI/Resolver.autowireArguments.81.phpt b/tests/DI/Resolver.autowireArguments.81.phpt index 340da53e3..70754da75 100644 --- a/tests/DI/Resolver.autowireArguments.81.phpt +++ b/tests/DI/Resolver.autowireArguments.81.phpt @@ -41,3 +41,13 @@ Assert::same( function () {} ), ); + +// object as default with typehint +Assert::same( + ['b' => 10], + Resolver::autowireArguments( + new ReflectionFunction(function (stdClass $a = new stdClass, $b = null) {}), + [1 => 10], + function () {} + ), +);