Skip to content

Commit 255e05c

Browse files
committed
Fix another problem with variadic parameters
1 parent a0d4781 commit 255e05c

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

specs/DependencyResolver::call.spec.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Technically\DependencyResolver\Specs\Fixtures\MyInstanceMethodService;
77
use Technically\DependencyResolver\Specs\Fixtures\MyInvokableService;
88
use Technically\DependencyResolver\Specs\Fixtures\MyStaticMethodService;
9+
use Technically\NullContainer\NullContainer;
910

1011
describe('DependencyResolver::call()', function () {
1112
it('should call global functions by name', function () {
@@ -102,4 +103,22 @@
102103
assert(is_array($ret));
103104
assert(count($ret) === 1);
104105
});
106+
107+
it('should call function by passing variadic parameter value explicitly', function () {
108+
$container = new ArrayContainer();
109+
$container->set(ContainerInterface::class, $container);
110+
$resolver = new DependencyResolver($container);
111+
112+
$null = new NullContainer();
113+
114+
$ret = $resolver->call(function (ContainerInterface ...$containers) {
115+
return $containers;
116+
}, [
117+
'containers' => [$null],
118+
]);
119+
120+
assert(is_array($ret));
121+
assert(count($ret) === 1);
122+
assert($ret === [$null]);
123+
});
105124
});

src/DependencyResolver.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,11 @@ private function resolveParameters(array $parameters, array $bindings = []): arr
110110
}
111111

112112
if (array_key_exists($parameter->getName(), $bindings)) {
113-
$values[] = $bindings[$parameter->getName()];
113+
if ($parameter->isVariadic()) {
114+
$values = array_merge($values, $bindings[$parameter->getName()]);
115+
} else {
116+
$values[] = $bindings[$parameter->getName()];
117+
}
114118
continue;
115119
}
116120

0 commit comments

Comments
 (0)