<commit_before><?php
/**
 * Класс-парсер конфигурации проекта
 * @file    Config.php
 *
 * PHP version 5.3+
 *
 * @author  <NAME> <<EMAIL>>
 * @date    Птн Июн 08 17:28:22 2012
 * @version
 */

/**
 * Класс Config
 * @author  <NAME> <<EMAIL>>
 */
class Config
{
    private static $data = NULL;

    /**
     * Парсер конфиг файла
     * @throws Exception
     */
    private static function read()
    {
        self::checkDefaults();
        $config = parse_ini_file(CONFIG_FILE, TRUE);

        foreach ($config as $namespace => $param) {
            $section = explode(':', $namespace);

            array_walk($section, function(&$value) {
                $value = trim($value);
            });

            // Обработка наследования параметров только для секции окружения
            if (ENVIRONMENT !== $section[0]
                || !isset($section[1])
                || !isset($config[$section[1]])
            ) {
                continue;
            }

            $config[ENVIRONMENT] = array_merge($config[$section[1]], $config[$namespace]);
        }

        try {
            if (!isset($config[ENVIRONMENT])) {
                throw new Exception('Не найдена секция окружения в конфиг-файле!');
            }

            self::$data = $config[ENVIRONMENT];
        }
        catch(Exception $e) {
            //TODO: Редирект на 500
            die($e->getMessage());
        }

        unset($config);
    }

    /**
     * Проверка умолчаний окружения и пути
     */
    private static function checkDefaults()
    {
        if (NULL === ENVIRONMENT)
            define('ENVIRONMENT', 'production');

        if (NULL === CONFIG_FILE)<commit_msg>Вынес в отдельную функцию наследование параметров<commit_after><?php
/**
 * Класс-парсер конфигурации проекта
 * @file    Config.php
 *
 * PHP version 5.3+
 *
 * @author  <NAME> <<EMAIL>>
 * @date    Птн Июн 08 17:28:22 2012
 * @version
 */

/**
 * Класс Config
 * @author  <NAME> <<EMAIL>>
 */
class Config
{
    private static $data = NULL;

    /**
     * Парсер конфиг файла
     * @throws Exception
     */
    private static function read()
    {
        self::checkDefaults();
        $config = parse_ini_file(CONFIG_FILE, TRUE);

        self::initInheritance($config);

        try {
            if (!isset($config[ENVIRONMENT])) {
                throw new Exception('Не найдена секция окружения в конфиг-файле!');
            }

            self::$data = $config[ENVIRONMENT];
        }
        catch(Exception $e) {
            //TODO: Редирект на 500
            die($e->getMessage());
        }

        unset($config);
    }

    /**
     * Проверка секций конфига на наследование и
     * инициализация наследуемых параметров
     * @param array $config
     */
    private static function initInheritance(&$config)
    {
        foreach ($config as $namespace => $param) {
            $section = explode(':', $namespace);

            array_walk($section, function(&$value) {
                $value = trim($value);
            });

            // Обработка наследования параметров только для секции окружения
            if (ENVIRONMENT !== $section[0]
                || !isset($section[1])
                || !isset($config[$section[1]])
            ) {
                continue;
            }

            $config[ENVIRONMENT] = array_merge($config[$section[1]], $config[$namespace]);
        }
    }

    /**
     * Проверка умолчаний окружения и пути
     */
    private static function checkDefaults()
    {
        if (NULL === ENVIRONMENT)
            define('ENVIRONMENT', 'production');

        if (NULL === CONFIG_FILE)
{'fraction_non_alphanumeric': 0.13606194690265486, 'fraction_numerical': 0.011615044247787611, 'mean_word_length': 1.8324197337509789, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3985005', 'n_tokens_mistral': 1152, 'n_tokens_neox': 1165, 'n_words': 239}