Skip to content

Commit 3238899

Browse files
authored
Merge pull request #32 from php-fn/pr-variadic-parameters
Support functions with (non typed) variadic parameters
2 parents 8e7f353 + c313cda commit 3238899

File tree

2 files changed

+6
-7
lines changed

2 files changed

+6
-7
lines changed

src/Invoker.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,8 @@ public function call($callable, array $parameters = [])
6262

6363
// Check all parameters are resolved
6464
$diff = array_diff_key($callableReflection->getParameters(), $args);
65-
if (! empty($diff)) {
66-
$parameter = reset($diff);
67-
\assert($parameter instanceof ReflectionParameter);
65+
$parameter = reset($diff);
66+
if ($parameter && \assert($parameter instanceof ReflectionParameter) && ! $parameter->isVariadic()) {
6867
throw new NotEnoughParametersException(sprintf(
6968
'Unable to invoke the callable because no value was given for parameter %d ($%s)',
7069
$parameter->getPosition() + 1,

tests/InvokerTest.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -451,11 +451,11 @@ public function should_throw_if_no_value_for_optional_parameter_2()
451451
*/
452452
public function should_invoke_callable_with_variadic_parameter()
453453
{
454-
$result = $this->invoker->call(function (...$param) {
454+
$callable = function (...$param) {
455455
return $param;
456-
}, [1, 2, 3]);
457-
458-
$this->assertEquals([1, 2, 3], $result);
456+
};
457+
$this->assertEquals([1, 2, 3], $this->invoker->call($callable, [1, 2, 3]), 'non-empty variadic');
458+
$this->assertEquals([], $this->invoker->call($callable, []), 'empty variadic');
459459
}
460460

461461
private function assertWasCalled(CallableSpy $callableSpy)

0 commit comments

Comments
 (0)