From e7734d3c205a3af216d5fb548d97772f535ada58 Mon Sep 17 00:00:00 2001 From: Yuta Nagamiya Date: Wed, 25 Dec 2019 20:17:50 +0900 Subject: [PATCH] Add splat operator (...) support (#860) * Add splat operator (...) support * Add test --- src/Method.php | 4 ++-- tests/MethodTest.php | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Method.php b/src/Method.php index 9eb9d2c..028e1b7 100644 --- a/src/Method.php +++ b/src/Method.php @@ -314,9 +314,9 @@ class Method $params = array(); $paramsWithDefault = array(); foreach ($method->getParameters() as $param) { - $paramStr = '$' . $param->getName(); + $paramStr = $param->isVariadic() ? '...$' . $param->getName() : '$' . $param->getName(); $params[] = $paramStr; - if ($param->isOptional()) { + if ($param->isOptional() && !$param->isVariadic()) { $default = $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null; if (is_bool($default)) { $default = $default ? 'true' : 'false'; diff --git a/tests/MethodTest.php b/tests/MethodTest.php index 6f1976e..b290ba4 100644 --- a/tests/MethodTest.php +++ b/tests/MethodTest.php @@ -32,15 +32,16 @@ class ExampleTest extends \PHPUnit_Framework_TestCase * * @param string $last * @param string $first + * @param string $middle * @static */'; $this->assertEquals($output, $method->getDocComment('')); $this->assertEquals('setName', $method->getName()); $this->assertEquals('\\'.ExampleClass::class, $method->getDeclaringClass()); - $this->assertEquals('$last, $first', $method->getParams(true)); - $this->assertEquals(['$last', '$first'], $method->getParams(false)); - $this->assertEquals('$last, $first = \'Barry\'', $method->getParamsWithDefault(true)); - $this->assertEquals(['$last', '$first = \'Barry\''], $method->getParamsWithDefault(false)); + $this->assertEquals('$last, $first, ...$middle', $method->getParams(true)); + $this->assertEquals(['$last', '$first', '...$middle'], $method->getParams(false)); + $this->assertEquals('$last, $first = \'Barry\', ...$middle', $method->getParamsWithDefault(true)); + $this->assertEquals(['$last', '$first = \'Barry\'', '...$middle'], $method->getParamsWithDefault(false)); $this->assertEquals(true, $method->shouldReturn()); } } @@ -50,9 +51,10 @@ class ExampleClass /** * @param string $last * @param string $first + * @param string $middle */ - public function setName($last, $first = 'Barry') + public function setName($last, $first = 'Barry', ...$middle) { return; } -} \ No newline at end of file +}