*/ final class MethodArguments implements IteratorAggregate { /** @var list */ private array $arguments = []; /** * @param array $arguments */ public function __construct(Parameters $parameters, array $arguments) { foreach ($parameters as $parameter) { $name = $parameter->name; if ($parameter->isVariadic) { $this->arguments = [...$this->arguments, ...array_values($arguments[$name])]; // @phpstan-ignore-line we know that the argument is iterable } elseif (array_key_exists($name, $arguments)) { $this->arguments[] = $arguments[$name]; } } } public function getIterator(): Traversable { yield from $this->arguments; } }