*/ private array $options; /** * @param list $channels * @param array $options */ public function __construct(string $subject, string $content, array $channels = ['email'], array $options = []) { parent::__construct($subject, $channels); parent::content($content); if (isset($options['importance'])) { parent::importance((string) $options['importance']); } $this->options = $options; } public function subject(string $subject) : static { $this->immutable(); } public function content(string $content) : static { $this->immutable(); } public function importance(string $importance) : static { $this->immutable(); } public function importanceFromLogLevelName(string $level) : static { $this->immutable(); } public function emoji(string $emoji) : static { $this->immutable(); } public function exception(Throwable $exception) : static { $this->immutable(); } /** * @param list $channels */ public function channels(array $channels) : static { $this->immutable(); } /** * @return array */ public function getOptions(string $channel) : array { $options = $this->options[$channel] ?? []; return is_array($options) ? $options : []; } private function immutable() : never { throw new LogicException('Cacti notifications are immutable after construction.'); } }