(\s+|\s$)/', ' => ', $var_dump);
			$var_dump = htmlspecialchars($var_dump);
			$var_dump = preg_replace('/(=> )+([a-zA-Z]+\(\d+\))/', '$1$2', $var_dump);
			ob_end_clean();
			$fn_name = ! empty($name)
				? $name[1]
				: 'EVAL';
			$var_dump = '
				
					
						var_dump(' . trim($fn_name) . ') - ' . self::_trace() .
					'
					'
					. $var_dump .
					'
				 
			';
			echo $var_dump;
			if ($exit) exit;
		}
		/**
		 * Функция для вывода переменной (для отладки)
		 *
		 * @param mixed $var любая переменная
		 */
		public static function _print($var, $exit = false)
		{
			$backtrace = debug_backtrace();
			$backtrace = $backtrace[0];
			if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file']))
			{
				$file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match);
				$file = $match[1];
			}
			$fh = fopen((isset($file) ? $file : $backtrace['file']), 'r');
			$line = 0;
			while (++$line <= $backtrace['line'])
			{
				$code = fgets($fh);
			}
			fclose($fh);
			preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name);
			ob_start();
			print_r($var);
			$var_dump = htmlspecialchars(ob_get_contents());
			$var_dump = preg_replace('/(=>)/', '$1', $var_dump);
			ob_end_clean();
			$fn_name = !empty($name)
				? $name[1]
				: 'EVAL';
			$var_dump = '
				
					
						print_r(' . trim($fn_name) . ') - ' . self::_trace() .
					'
					'
					. $var_dump .
					'
				 
			';
			echo $var_dump;
			if ($exit) exit;
		}
		/**
		 * Функция для вывода переменной (для экспорта)
		 *
		 * @param mixed $var любая переменная
		 */
		public static function _exp($var, $exit = false)
		{
			$backtrace = debug_backtrace();
			$backtrace = $backtrace[0];
			if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file']))
			{
				$file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match);
				$file = $match[1];
			}
			$fh = fopen((isset($file) ? $file : $backtrace['file']), 'r');
			$line = 0;
			while (++$line <= $backtrace['line'])
			{
				$code = fgets($fh);
			}
			fclose($fh);
			preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name);
			ob_start();
			var_export($var);
			$fn_name = !empty($name)
				? $name[1]
				: 'EVAL';
			$var_export = htmlspecialchars(ob_get_contents());
			$var_export = preg_replace('/(=>)/', '$1', $var_export);
			ob_end_clean();
			$var_dump = '
				
					var_export('
						. trim($fn_name) . ') - ' . self::_trace() .
					'
					'
						. $var_export .
					'
				 
			';
			echo $var_dump;
			if ($exit) exit;
		}
		/**
		 * Функция для вывода переменной (для отладки)
		 *
		 * @param mixed $var любая переменная
		 * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт
		 */
		public static function _html($var, $exit = false)
		{
			$backtrace = debug_backtrace();
			$backtrace = $backtrace[0];
			if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file']))
			{
				$file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match);
				$file = $match[1];
			}
			$fh = fopen((isset($file) ? $file : $backtrace['file']), 'r');
			$line = 0;
			while (++$line <= $backtrace['line'])
			{
				$code = fgets($fh);
			}
			fclose($fh);
			preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name);
			ob_start();
			var_export($var);
			$fn_name = !empty($name)
				? $name[1]
				: 'EVAL';
			$var_dump = ob_get_contents();
			ob_end_clean();
			$var_dump = '
				
					var_export('
						. trim($fn_name) . ') - ' . self::_trace() .
					'
					'
						. htmlentities($var_dump, ENT_QUOTES) .
					'
				 
			';
			echo $var_dump;
			if ($exit) exit;
		}
		/**
		 * Функция для записи переменной в файл (для отладки)
		 *
		 * @param mixed $var любая переменная
		 * @param bool $exit true - остановливает дальнейшее выполнение скрипта, false - продолжает выполнять скрипт
		 */
		public static function _dump($var, $append = true, $exit = false)
		{
			$backtrace = debug_backtrace();
			$backtrace = $backtrace[0];
			if (preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file']))
			{
				$file = preg_match('/([^\(]*)\((.*)\)/i', $backtrace['file'], $match);
				$file = $match[1];
			}
			$fh = fopen((isset($file) ? $file : $backtrace['file']), 'r');
			$line = 0;
			while (++$line <= $backtrace['line'])
			{
				$code = fgets($fh);
			}
			fclose($fh);
			preg_match('/' . __FUNCTION__ . '\s*\((.*)\)\s*;/u', $code, $name);
			ob_start();
			var_dump($var);
			$var_dump = ob_get_contents();
			$var_dump = preg_replace('/=>(\s+|\s$)/', ' => ', $var_dump);
			$var_dump = htmlspecialchars($var_dump);
			$var_dump = preg_replace('/(=> )+([a-zA-Z]+\(\d+\))/', '$1$2', $var_dump);
			ob_end_clean();
			$fn_name = ! empty($name)
				? $name[1]
				: 'EVAL';
			$var_dump = '
				
					
						' . date("j F Y, H:i:s") . ' - var_dump(' . trim($fn_name) . ') - ' . self::_trace() .
					'
					'
					. $var_dump .
					'
				 
			';
			if ($append)
				file_put_contents(BASE_DIR . '/debug.html', $var_dump, FILE_APPEND);
			else
				file_put_contents(BASE_DIR . '/debug.html', $var_dump);
			if ($exit)
				exit;
		}
		/**
		 * Функция для трейсинга дебаггера
		 *
		 * @param
		 * @return string
		 */
		public static function _trace()
		{
			$bt = debug_backtrace();
			$trace = $bt[1];
			$line = $trace['line'];
			$file = $trace['file'];
			$function = $trace['function'];
			$class = (isset($bt[2]['class'])
				? $bt[2]['class']
				: 'None');
			if (isset($bt[2]['class']))
			{
				$type = $bt[2]['type'];
			}
			else
			{
				$type = 'Unknow';
			}
			$function = isset($bt[2]['function'])
				? $bt[2]['function']
				: 'None';
			return sprintf('Class: %s | Type: %s | Function: %s | File: %s line %s', $class, $type, $function, $file, $line);
		}
		/**
		 * Функция отвечает за начало таймера
		 *
		 * @param string $name любая переменная (ключ массива)
		 */
		public static function startTime($name = '')
		{
			Debug::$time[$name] = microtime(true);
		}
		/**
		 * Функция отвечает за окончание таймера
		 *
		 * @param string $name любая переменная (ключ массива)
		 * @return
		 */
		public static function endTime($name = '')
		{
			if (isset(Debug::$time[$name]))
				return sprintf("%01.4f", microtime(true) - Debug::$time[$name]) . ' sec';
		}
		/**
		 * Функция отвечает за начало подсчета используеой памяти
		 *
		 * @param string $name любая переменная (ключ массива)
		 */
		public static function startMemory($name = '')
		{
			Debug::$memory[$name] = memory_get_usage();
		}
		/**
		 * Функция отвечает за окончание подсчета используемой памяти
		 *
		 * @param string $name любая переменная (ключ массива)
		 * @return string
		 */
		public static function endMemory($name = '')
		{
			if (isset(Debug::$memory[$name]))
				return Debug::formatSize(memory_get_usage() - Debug::$memory[$name]);
		}
		/**
		 * Форматированный вывод размера
		 *
		 * @param int $size размер
		 * @return string нормированный размер с единицой измерения
		 */
		public static function formatSize($size)
		{
			if ($size >= 1073741824)
			{
				$size = round($size / 1073741824 * 100) / 100 . ' Gb';
			}
			elseif ($size >= 1048576)
			{
				$size = round($size / 1048576 * 100) / 100 . ' Mb';
			}
			elseif ($size >= 1024)
			{
				$size = round($size / 1024 * 100) / 100 . ' Kb';
			}
			else
			{
				$size = $size . ' b';
			}
			return $size;
		}
		/**
		 * Форматированный вывод чисел
		 *
		 * @param int $number число
		 * @param int $decimal
		 * @param string $after
		 * @param string $thousand
		 * @return string
		 */
		public static function numFormat($number, $decimal = 0, $after = ',', $thousand= '.')
		{
			if ($number)
				return number_format($number, $decimal, $after, $thousand);
			return '';
		}
	}
?>