<?php

declare( strict_types=1 );

namespace WPDesk\Init\Extension;

/**
 * @implements \IteratorAggregate<class-string, Extension>
 */
class ExtensionsSet implements \IteratorAggregate {

	/** @var array<class-string<Extension>, Extension> */
	private $extensions = [];

	public function __construct( Extension ...$extensions ) {
		foreach ( $extensions as $extension ) {
			$this->add( $extension );
		}
	}

	public function add( Extension $extension ): void {
		$class                      = \get_class( $extension );
		$this->extensions[ $class ] = $extension;
	}

	public function getIterator(): \Traversable {
		return new \ArrayIterator( $this->extensions );
	}
}