*/ final class Layer implements IteratorAggregate { /** * Creates a new layer instance. */ private function __construct(private readonly BaseLayer $layer) { // } /** * Creates a new layer instance from the given base layer. * * @param array $objects */ public static function fromBase(array $objects): self { return new self(new BaseLayer($objects)); } /** * If the layer is equal to the given layer. */ public function equals(self $layer): bool { return $this->layer->equals($layer->layer); } /** * Get the iterator. */ public function getIterator(): Traversable { return $this->layer->getIterator(); } /** * Get the base layer. */ public function getBase(): BaseLayer { return $this->layer; } /** * Dynamically calls the layer methods. * * @param array $arguments */ public function __call(string $name, array $arguments): self { return new self($this->layer->{$name}(...$arguments)); // @phpstan-ignore-line } }