Есть php код:
public static function load() : void
{
$config = new ...;
$config = $config->getData();
$throw = function() : void
{
throw new \ConfigException ("Invalid config.");
};
self::$param1 = $config["core"]["param1"] ?? ($throw)();
self::$param2 = $config["core"]["param2"] ?? ($throw)();
self::$param3 = $config["module"]["param3"] ?? ($throw)();
self::$param4 = $config["module"]["param4"] ?? ($throw)();
}
public static function getParam1() : bool
{
return self::$param1;
}
public static function getParam2() : string
{
return self::$param2;
}
public static function getParam3() : int
{...}
/*и т.д.*/
Он проверяет значения в массиве, и если их нету, то выбрасывает исключение ($throw)()
, если есть, то это значение присваивается в статическое свойство класса.
На мой взгляд, сейчас проверка значения и выбрасывание исключения выглядит ужасно. Как это можно оформить получше?
Говорят, что лучший код не тот, в который нечего добавить, а тот, из которого нечего убрать. Если вы хотите провалидировать структуру массива конфига, убедившись что он содержит необходимые ключи -- сделайте именно это. Если вы хотите провалидировать значения параметров, с которыми собираетесь работать -- сделайте именно это. В конце концов, не важно как именно вы бросаете исключение, важно зачем и почему вы его бросаете.
Сделайте сообщение об ошибке более информативным (какой ключ отсутствует, в каком конфиге). Убедитесь что ваши проверки действительно необходимы в этом подозрительном классе. Избавтесь от лишних зависимостей. Убедитесь что сам подозрительный класс необходим.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как вывести число с сотыми, если число уже к примеру: 52, чтобы вывести 5200?