$servers */ public function __construct( public readonly array $servers = [] ) {} public static function fromArray(array $items): self { $servers = []; foreach ($items as $item) { if ($item instanceof IceCandidateDto) { $servers[] = $item; } elseif (is_array($item)) { $servers[] = IceCandidateDto::fromArray($item); } } return new self($servers); } public static function defaultStun(): self { return new self([ new IceCandidateDto(urls: [ 'stun:stun.l.google.com:19302', 'stun:stun.cloudflare.com:3478', ]), ]); } public function toArray(): array { return array_map(fn (IceCandidateDto $server) => $server->toArray(), $this->servers); } public function jsonSerialize(): array { return $this->toArray(); } public function count(): int { return count($this->servers); } public function isEmpty(): bool { return empty($this->servers); } public function getIterator(): Traversable { return new ArrayIterator($this->servers); } }