<commit_before><?php

/**
 * Класс Object.
 *
 * @package energine
 * @subpackage core
 * @author 1m.dm
 * @copyright Energine 2006
 * @version $Id$
 */


/**
 * Родительский класс для всех объектов системы.
 * Обеспечивает общую функциональность объектов
 * измерение времени выполнения и загрузку данных из конфигурационного файла
 *
 * @package energine
 * @subpackage core
 * @author 1m.dm
 * @abstract
 */
abstract class Object {
    /**
     * Путь к файлу конфигурации
     */
    const CONFIG_DIR = 'site/';

    /**
     * Имя файла конфигурации
     */
    const CONFIG_FILE = 'system.config.xml';

    /**
     * @access public
     * @static
     * @var SimpleXMLElement конфигурация системы
     */
    public static $systemConfig;


    /**
     * @access private
     * @var float счетчик времени выполнения
     */
    private $executionTime;

    /**
      * Пустой конструктор
      *
      * @return void
      * @access public
      */

     public function __construct() {

     }

    /**
     * Запускает счетчик времени выполнения.
     *
     * @access public
     * @return void
     */
    public function startTimer() {
        $this->executionTime = microtime(true);
    }

    /**
     * Останавливает счетчик времени выполнения.
     *
     * @access public
     * @return float
     */
    public function stopTimer() {
        return ($this->executionTime = microtime(true) - $this->executionTime);
    }

    /**
     * Сбрасывает счетчик времени, возвращает предыдущее значение счетчика
     *
     * @return float
     * @access public
     */

    public function resetTimer() {
        $result = $this->stopTimer();
        $this->startTimer();
        return $result;
    }

    /**
     * Возвращает значение счетчика времени выполнения.
     *
     * @access public
     * @return float
     */
    public function getTimer() {
        return $this->executionTime;
    }

    /**
     * Возвращает значение указанного параметра конфигурации.
     * Конфигурация представляет из себя дерево параметров;
     * в качестве разделителя уровней дерева используется точка.
     * Пример:
     *     Object::_getConfigValue('database.dsn');
     *
     * @access public
     * @static
     * @param string $paramPath путь к параметру в дереве конфигурации
     * @return string
     */
    public static function _getConfigValue($paramPath) {
        //при первом обращении загружает SimpleXML данные в  статическую переменную $systemConfig
        if (!isset(self::$systemConfig)) {
            if (!file_exists(self::CONFIG_DIR.self::CONFIG_FILE)) {
            	trigger_error('ERR_DEV_NO_CONFIG', E_USER_ERROR);
            }
            self::$systemConfig = simplexml_load_file(self::CONFIG_DIR.self::CONFIG_FILE);
        }
        $paramPath = str_replace('.', '->', trim($paramPath));
        eval("\$value = (string)self::\$systemConfig->$paramPath;");
        return $value;
    }

    /**
     * Нестатический метод-обёртка над Object::_getConfigValue -
     * для удобства использования внутри производных классов.
     *
     * @access public
     * @param string $paramPath путь к параметру в дереве конфигурации
     * @return string
     * @see Object::_getConfigValue()
     */
    public function getConfigValue($paramPath) {
        return self::_getConfigValue($paramPath);
    }
}<commit_msg>getConfigValue method is optimized<commit_after><?php

/**
 * Класс Object.
 *
 * @package energine
 * @subpackage core
 * @author 1m.dm
 * @copyright Energine 2006
 * @version $Id$
 */


/**
 * Родительский класс для всех объектов системы.
 * Обеспечивает общую функциональность объектов
 * измерение времени выполнения и загрузку данных из конфигурационного файла
 *
 * @package energine
 * @subpackage core
 * @author 1m.dm
 * @abstract
 */
abstract class Object {
    /**
     * Путь к файлу конфигурации
     */
    const CONFIG_DIR = 'site/';

    /**
     * Имя файла конфигурации
     */
    const CONFIG_FILE = 'system.config.xml';

    /**
     * @access private
     * @static
     * @var SimpleXMLElement конфигурация системы
     */
    private static $systemConfig;
    /**
     * @access private
     * @static 
     * @var array кеш для значений конфига
     */
    private static $values = array();


    /**
     * @access private
     * @var float счетчик времени выполнения
     */
    private $executionTime;

    /**
      * Пустой конструктор
      *
      * @return void
      * @access public
      */

     public function __construct() {

     }

    /**
     * Запускает счетчик времени выполнения.
     *
     * @access public
     * @return void
     */
    public function startTimer() {
        $this->executionTime = microtime(true);
    }

    /**
     * Останавливает счетчик времени выполнения.
     *
     * @access public
     * @return float
     */
    public function stopTimer() {
        return ($this->executionTime = microtime(true) - $this->executionTime);
    }

    /**
     * Сбрасывает счетчик времени, возвращает предыдущее значение счетчика
     *
     * @return float
     * @access public
     */

    public function resetTimer() {
        $result = $this->stopTimer();
        $this->startTimer();
        return $result;
    }

    /**
     * Возвращает значение счетчика времени выполнения.
     *
     * @access public
     * @return float
     */
    public function getTimer() {
        return $this->executionTime;
    }

    /**
     * Возвращает значение указанного параметра конфигурации.
     * Конфигурация представляет из себя дерево параметров;
     * в качестве разделителя уровней дерева используется точка.
     * Пример:
     *     Object::_getConfigValue('database.dsn');
     *
     * @access public
     * @static
     * @param string $paramPath путь к параметру в дереве конфигурации
     * @return string
     */
    public static function _getConfigValue($paramPath) {
    	$value = null;
    	
        //при первом обращении загружает SimpleXML данные в  статическую переменную $systemConfig
        if (!isset(self::$systemConfig)) {
            if (!file_exists(self::CONFIG_DIR.self::CONFIG_FILE)) {
            	trigger_error('ERR_DEV_NO_CONFIG', E_USER_ERROR);
            }
            self::$systemConfig = simplexml_load_file(self::CONFIG_DIR.self::CONFIG_FILE);
        }
        $paramPath = str_replace('.', '->', trim($paramPath));
        
        if(!isset(self::$values[$paramPath])){
	        eval("\$value = self::\$systemConfig->$paramPath;");
	        if($value && !count($value->children())){
	        	$value = (string)$value;
	        }
	        self::$values[$paramPath] = $value;
        }
        else{
        	$value = self::$values[$paramPath];
        }
        
        return $value;
    }

    /**
     * Нестатический метод-обёртка над Object::_getConfigValue -
     * для удобства использования внутри производных классов.
     *
     * @access public
     * @param string $paramPath путь к параметру в дереве конфигурации
     * @return string
     * @see Object::_getConfigValue()
     */
    public function getConfigValue($paramPath) {
        return self::_getConfigValue($paramPath);
    }
}
{'fraction_non_alphanumeric': 0.11246158144733166, 'fraction_numerical': 0.0016764459346186086, 'mean_word_length': 2.276430205949657, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 20, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 4}, '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': '4098889', 'n_tokens_mistral': 2343, 'n_tokens_neox': 2492, 'n_words': 504}