$options Key-value pairs for options * @param string|null $placeholder Optional placeholder option */ public function __construct( public array $options, public ?string $placeholder = null ) { } /** * Convert options to HTML option elements */ public function toHtml(string $selectedValue = ''): string { $html = ''; if ($this->placeholder !== null) { $html .= ''; } foreach ($this->options as $value => $label) { $selected = ((string) $value === $selectedValue) ? ' selected' : ''; $html .= sprintf( '', htmlspecialchars((string) $value), $selected, htmlspecialchars($label) ); } return $html; } /** * Get options as array * * @return array */ public function toArray(): array { return $this->options; } }