$parameterValue) { $this->setParameter($parameter, $parameterValue); } } public function getParameter(string $parameter, $default = null) { $this->checkParameterSupport($parameter); return $this->parameters[$parameter] ?? $default; } public function setParameter(string $parameter, $parameterValue): void { $this->checkParameterSupport($parameter); $this->validateParameter($parameter, $parameterValue); $this->parameters[$parameter] = $parameterValue; } abstract protected function getSupportedParameters(): array; /** * @param mixed $parameterValue */ abstract protected function validateParameter(string $parameter, $parameterValue): void; private function checkParameterSupport(string $parameter): void { if (!in_array($parameter, $this->getSupportedParameters(), true)) { throw new InvalidArgumentException( sprintf( 'Context parameter %s is not supported.', $parameter ) ); } } }