$value){ if(substr($key, 0, $env_prefix_len) === self::ENV_PREFIX){ $key = strtolower(substr($key, $env_prefix_len)); if($value === 'true'){ $value = true; } elseif($value === 'false'){ $value = false; } // Associative arrays in environment variables if($key === 'visitor' || $key === 'friends'){ $value = self::parse_env_assoc($value); } self::$_settings[$key] = $value; } } } public static function get($key){ if(self::$_settings === null){ self::init(); } if(!array_key_exists($key, self::$_settings)){ throw new ConfigException(sprintf('Key "%s" not found in settings.', $key)); } return self::$_settings[$key]; } public static function get_safe($key, $default = ''){ try { $value = self::get($key); } catch (ConfigException $e) { $value = $default; } return $value; } // Parse associative array from string in format key:value private static function parse_env_assoc($data){ if(!preg_match_all("/([^\s]+):([^\s]+)/s", $data, $matches)){ return []; } list($_, $keys, $values) = $matches; $array = []; foreach ($values as $key => $value) { $array[$keys[$key]] = $value; } return $array; } } class ConfigException extends Exception {}