<?php namespace App; abstract class Config { private static string $default_file; private static string $override_file; private static array $config; static function file_location(string $default, string $override) { self::$default_file = $default; self::$override_file = $override; } static function get(string $key): string|int|float|bool { if (isset(self::$config)) { return self::$config[$key]; } self::$config = require self::$default_file; if (!file_exists(self::$override_file)) { return self::$config[$key]; } foreach (require self::$override_file as $override_key => $override_value) { if (!array_key_exists($override_key, self::$config)) { trigger_error( 'Failed to validate config: ' . "Undefined option '$override_key'" , E_USER_ERROR); } if (gettype($override_value) !== gettype(self::$config[$override_key])) { trigger_error( 'Failed to validate config: ' . "Type mismatch in config file: '$override_key' should be of type " . gettype(self::$config[$override_key]) . ' not ' . gettype($override_value) , E_USER_ERROR); } self::$config[$override_key] = $override_value; } return self::$config[$key]; } }