VerifyOptionName($sOptionName); if(isset($this->aOptions[$sOptionName])){ $this->aOptions[$sOptionName]->oValue = $mDefaultValue; } else{ $this->aOptions[$sOptionName] = new Option($sOptionName, $mDefaultValue, $bTypeOption); } } /** * @param string $sOptionName * * @return void * @throws RegisterException */ private function VerifyOptionName(string $sOptionName): void { if(!ctype_alnum(str_replace(array('-', '_'), '', $sOptionName))) { throw new RegisterException("Option name '$sOptionName' is not valid. Only alphanumeric characters, hyphens and underscores are allowed."); } } /** * Set an option array value. * * @param string $sOptionName * @param string $sArrayKey * @param mixed $mDefaultValue * * @return void */ public function SetOptionArrayValue(string $sOptionName, string $sArrayKey, mixed $mDefaultValue = null): void { // Initialization of the option as an array if not set if(!isset($this->aOptions[$sOptionName])){ $this->SetOption($sOptionName, []); } $this->aOptions[$sOptionName]->oValue[$sArrayKey] = $mDefaultValue; } /** * Get all options. * * @return array */ public function GetOptions(): array { $aOptions = array_filter($this->aOptions, fn ($oElement) => $oElement->bIsTypeOption); return array_map( fn ($oElement) => $oElement->oValue, $aOptions); } /** * Get a type option. * * @param string $sOption * * @return mixed */ public function GetOption(string $sOption): mixed { return $this->aOptions[$sOption]->oValue; } /** * Check if an option exists. * * @param string $sOption * * @return bool */ public function HasOption(string $sOption): bool { return array_key_exists($sOption, $this->aOptions); } }