<commit_before><?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');



/**
 * _P Class.
 * 
 * PHP Version 5.3.9
 * 
 * @name   		_P Class
 * @package		Letcoc
 * @author 		<NAME>
 * @title  		Набор плюшек для PHP кодера кода.
 * 
 * @info   		Для получения справки по классу, выполните: <code>_P::DOC();</code>
 * 
 * @example		[Образец класса для запуска примеров]
 * <pre>
 *	class some{
 *		public $param	 = array();
 *		public $param_ll = "someValue";
 
 *		/**
 *		 * Some Method test
 *		 * ...
 *		 * /
 *		function test(){}
 *
 *		function test_ll(){}
 *	}
 *	$class = new some;
 * </pre>
 */
class _P {
	
	/**
	 * Метод выводящий результат Функции `print_r` обрамленный в `pre`.
	 * 
	 * @example	<code>_P::P( $you_variable );</code>
	 * 
	 * @access	public
	 * @param	any		$var	[Переменная, информация о которой будет выведена]
	 * @param	string|bool	$title	[string - Заголовок выходящий в начале контейнера с инфой;
	 *       	           	      	bool - `FALSE` не выводить заголовок ]
	 * 
	 * @param	bool		$var	[TRUE  - тэг `pre` будет позиционирован абсолютно]
	 * @param	bool		$return	[TRUE  - вернет без `pre`; FALSE - выведет в браузер ]
	 * @return	void
	 */
	public static function P( $var = "", $title = "Информация", $onTop = FALSE, $return = FALSE )
	{
		$onTop	= ( $onTop ) ? "position:absolute;z-index:999999;" : "";
		if( !$return )
			echo "<pre style='{$onTop}border:1px dotted red;padding:10px; background:#FFC; color:#000;'>";
			
		$buffer	 = "";
		if ( !is_bool( $title ) and $title !== FALSE )
			$buffer	.= print_r( "<h4 style='color:blue;'> :: {$title} :: </h4>", $return );
		$buffer	.= print_r( $var, $return );
		
		if( !$return )
			echo "</pre>";
		
		if( $return ) return $buffer;
	}
	
	
	/**
	 * Метод выводящий список методов переданного аргументом класса.
	 * 
	 * @example	<code>_P::CM( $class );</code>
	 * 
	 * @access	public
	 * @param	object	$class	[класс, методы которого нужно вывести.]
	 * @return	void
	 */
	public static function CM ( $class = "" )
	{
		if( !is_object( $class ) ) return;
		self::P(
			get_class_methods( $class ),
			"Методы класса - " . get_class( $class )
		);
	}
	
	
	/**
	 * Метод выводящий список свойства
	 * переданного аргументом класса или объекта.
	 * 
	 * @example	<code>_P::CV( $class );</code>
	 * 
	 * @access	public
	 * @param	object	$class	[класс, свойства которого нужно вывести.]
	 * @return	void
	 */
	public static function CV ( $class = "" )
	{
		if( !is_object( $class ) ) return;
		self::P(
			get_object_vars( $class ), 
			"Свойства класса - " . get_class( $class )
		);
	}
	
	
	/**
	 * Метод выводящий список свойств
	 * переданного аргументом класса или объекта.
	 * 
	 * Выводит информацию только о тех свойствах,
	 * значения которых не являются другими классами.
	 *
	 * @example	<code>_P::COV( $class );</code>
	 *
	 * @access	public
	 * @param	object	$class	[класс, свойства которого нужно вывести.]
	 * @return	void
	 */
	public static function COV( $class = "" )
	{
		if( !is_object( $class ) ) return;
			
		$BUFF				=	new stdClass;
		foreach( $class as $name => $value )
		{
			if( is_object( $value ) and get_class( $value ) != "stdClass" )
				continue;
			$BUFF->$name	= $value;
		}
		self::P(
			$BUFF,
			"Методы класса - " . get_class( $class )
		);
	}
	
	
	
	/**
	 * Метод выводит информацию о всех определенных ранее константах.
	 * 
	 * @example	<code>_P::DC();</code>
	 * 
	 * @access	public
	 * @return	void
	 */
	public static function DC ()
	{
		self::P(
			get_defined_constants(),
			"Информация о константах"
		);
	}
	
	
	/**
	 * Метод выводит информацию о файлах которые ранее были подключены
	 * через: include; include_once; require; require_once;
	 * 
	 * @example	<code>_P::_IF();</code>
	 * 
	 * @access	public
	 * @return	void
	 */
	public static function _IF ()
	{
		self::P(
			get_included_files(),
			"Информация о подключеных файлах"
		);
	}
	
	
	
	/**
	 * Метод возвращает модификатор (области видимости) свойства класса.
	 * 
	 * Или проверяет, имеет ли свойство `$property` экземпляра класса `$class`
	 * модификатор	`$modifer`.
	 * 
	 * @example		[Получение имени модификатора свойства `propetry_name` экземпляра класса `$class`]
	 * 	<code>_P::P( $class, "propetry_name" );</code>
	 * 
	 * @example		[Проверка, имеет ли свойство `propetry_name` экземпляра класса `$class` модификатор `private`]
	 * 	<code>_P::P( $class, "propetry_name", "private" );</code>
	 * 
	 * @access	public
	 * @param	object		$class		[Экземпляр класса]
	 * @param	string		$property	[Имя свойства экземпляра класса]
	 * @param	string|NULL	$modifer	[Название модификатора для проверки]
	 * @return	string|bool				[string - имя модификатора;
	 * 									 TRUE	- свойство имеет модификатор указанный в `$modifer`;
	 * 									 FALSE	- если такого свойства нет, и другие ошибки.]
	 */
	public static function CP_access (	$class = NULL, $property = NULL, $modifer = NULL )
	{
		if ( !is_object( $class ) OR !is_string( $property ) )
			return FALSE;
			
		if ( !is_null( $modifer ) AND !is_string( $modifer ) )
			return FALSE;
			
		
		/** Строковые значения констант модификаторов доступа. */
		$_IS	= array(
			"1"		=> "static",
			"256"	=> "public",
			"257"	=> "static",
			"512"	=> "protected",
			"1024"	=> "private"
		);
		
		/**
		 * Блок проверки экземпляра `stdClass`.
		 **/
			if ( get_class( $class ) == "stdClass" )
			{
				if ( isset( $class->{$property} ) and !is_string( $modifer ) )
				{
					return $_IS["256"];
				}
				else if ( isset( $class->{$property} ) and is_string( $modifer ) )
				{
					return ( strtolower( $_IS["256"] ) == strtolower( $modifer ) );
				}
				else
					return FALSE;
			}
		
		/**
		 * Блок проверки классов.
		 **/
			/** Получение информации о классе. */
			$_ReflectionClass		= new ReflectionClass( $class );
			
			/** Проверка наличия в классе запрошенного свойства. (нет - FALSE)*/
			if ( !$_ReflectionClass->hasProperty( $property ) )
				return FALSE;
		
			/** Получение информации свойстве класса. */
			$_ReflectionProperty	= new ReflectionProperty( $class, $property );
			$_Mod_int				= $_ReflectionProperty->getModifiers();
			
			
			/** Проверка наличия числового модификатора в массиве строковых значений. */
			if ( isset( $_IS[ $_Mod_int ] ) )
				$_mod_name			= $_IS[ $_Mod_int ];	//Строковое значение для этого модификатора.
			else
				$_mod_name			= $_IS[ "256" ];		//Дефолтное значение.	

			/** Если сказано проверить на соответствие.  */
			if ( is_string( $modifer ) )
				return ( strtolower( $_mod_name ) == strtolower( $modifer ) );
				
			/** Иначе вернем имя модификатора.  */
			else
				return strtolower( $_mod_name );
	}
	
	
	
	
	/**
	 * Метод выводит документацию по указанному классу.
	 * 
	 * @example_1
	 *	<pre>
	 *		class some{
	 *			/**
	 *			 * Some Method
	 *			 * ...
	 *			 * /
	 *			function test(){}
	 *		}	
	 *		$class	= new some;
	 *		_P::DOC( $class );<commit_msg> - Новый метод MEM (Метод выводит информацию о количестве памяти выделенном для PHP.)  - Новый метод CP_access (Метод возвращает модификатор (области видимости) свойства класса.)<commit_after><?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');



/**
 * _P Class.
 * 
 * PHP Version 5.3.9
 * 
 * @name   		_P Class
 * @package		Letcoc
 * @author 		<NAME>
 * @title  		Набор плюшек для PHP кодера кода.
 * 
 * @info   		Для получения справки по классу, выполните: <code>_P::DOC();</code>
 * 
 * @example		[Образец класса для запуска примеров]
 * <pre>
 *	class some{
 *		public $param	 = array();
 *		public $param_ll = "someValue";
 
 *		/**
 *		 * Some Method test
 *		 * ...
 *		 * /
 *		function test(){}
 *
 *		function test_ll(){}
 *	}
 *	$class = new some;
 * </pre>
 */
class _P {
	
	/**
	 * Метод выводящий результат Функции `print_r` обрамленный в `pre`.
	 * 
	 * @example	<code>_P::P( $you_variable );</code>
	 * 
	 * @access	public
	 * @param	any		$var	[Переменная, информация о которой будет выведена]
	 * @param	string|bool	$title	[string - Заголовок выходящий в начале контейнера с инфой;
	 *       	           	      	bool - `FALSE` не выводить заголовок ]
	 * 
	 * @param	bool		$var	[TRUE  - тэг `pre` будет позиционирован абсолютно]
	 * @param	bool		$return	[TRUE  - вернет без `pre`; FALSE - выведет в браузер ]
	 * @return	void
	 */
	public static function P( $var = "", $title = "Информация", $onTop = FALSE, $return = FALSE )
	{
		$onTop	= ( $onTop ) ? "position:absolute;z-index:999999;" : "";
		if( !$return )
			echo "<pre style='{$onTop}border:1px dotted red;padding:10px; background:#FFC; color:#000;'>";
			
		$buffer	 = "";
		if ( !is_bool( $title ) and $title !== FALSE )
			$buffer	.= print_r( "<h4 style='color:blue;'> :: {$title} :: </h4>", $return );
		$buffer	.= print_r( $var, $return );
		
		if( !$return )
			echo "</pre>";
		
		if( $return ) return $buffer;
	}
	
	
	
	/**
	 * Метод выводящий список методов переданного аргументом класса.
	 * 
	 * @example	<code>_P::CM( $class );</code>
	 * 
	 * @access	public
	 * @param	object	$class	[класс, методы которого нужно вывести.]
	 * @return	void
	 */
	public static function CM ( $class = "" )
	{
		if( !is_object( $class ) ) return;
		self::P(
			get_class_methods( $class ),
			"Методы класса - " . get_class( $class )
		);
	}
	
	
	
	/**
	 * Метод выводящий список свойства
	 * переданного аргументом класса или объекта.
	 * 
	 * @example	<code>_P::CV( $class );</code>
	 * 
	 * @access	public
	 * @param	object	$class	[класс, свойства которого нужно вывести.]
	 * @return	void
	 */
	public static function CV ( $class = "" )
	{
		if( !is_object( $class ) ) return;
		self::P(
			get_object_vars( $class ), 
			"Свойства класса - " . get_class( $class )
		);
	}
	
	
	
	/**
	 * Метод выводящий список свойств
	 * переданного аргументом класса или объекта.
	 * 
	 * Выводит информацию только о тех свойствах,
	 * значения которых не являются другими классами.
	 *
	 * @example	<code>_P::COV( $class );</code>
	 *
	 * @access	public
	 * @param	object	$class	[класс, свойства которого нужно вывести.]
	 * @return	void
	 */
	public static function COV( $class = "" )
	{
		if( !is_object( $class ) ) return;
			
		$BUFF				=	new stdClass;
		foreach( $class as $name => $value )
		{
			if( is_object( $value ) and get_class( $value ) != "stdClass" )
				continue;
			$BUFF->$name	= $value;
		}
		self::P(
			$BUFF,
			"Методы класса - " . get_class( $class )
		);
	}
	
	
	
	/**
	 * Метод выводит информацию о всех определенных ранее константах.
	 * 
	 * @example	<code>_P::DC();</code>
	 * 
	 * @access	public
	 * @return	void
	 */
	public static function DC ()
	{
		self::P(
			get_defined_constants(),
			"Информация о константах"
		);
	}
	
	
	
	/**
	 * Метод выводит информацию о файлах которые ранее были подключены
	 * через: include; include_once; require; require_once;
	 * 
	 * @example	<code>_P::_IF();</code>
	 * 
	 * @access	public
	 * @return	void
	 */
	public static function _IF ()
	{
		self::P(
			get_included_files(),
			"Информация о подключеных файлах"
		);
	}
	
	
	
	/**
	 * Метод возвращает модификатор (области видимости) свойства класса.
	 * 
	 * Или проверяет, имеет ли свойство `$property` экземпляра класса `$class`
	 * модификатор `$modifer`.
	 * 
	 * @example		[Получение имени модификатора свойства `propetry_name` экземпляра класса `$class`]
	 * 	<code>_P::P( $class, "propetry_name" );</code>
	 * 
	 * @example		[Проверка, имеет ли свойство `propetry_name` экземпляра класса `$class` модификатор `private`]
	 * 	<code>_P::P( $class, "propetry_name", "private" );</code>
	 * 
	 * @access	public
	 * @param	object		$class		[Экземпляр класса]
	 * @param	string		$property	[Имя свойства экземпляра класса]
	 * @param	string|NULL	$modifer	[Название модификатора для проверки]
	 * @return	string|bool				[string - имя модификатора;
	 * 									 TRUE	- свойство имеет модификатор указанный в `$modifer`;
	 * 									 FALSE	- если такого свойства нет, и другие ошибки.]
	 * 
	 * @todo	Сделать флаг который проверит доступно ли свойство для записи.
	 * 			(Для записи доступны не существующие и public свойства)
	 */
	public static function CP_access (	$class = NULL, $property = NULL, $modifer = NULL )
	{
		if ( !is_object( $class ) OR !is_string( $property ) )
			return FALSE;
			
		if ( !is_null( $modifer ) AND !is_string( $modifer ) )
			return FALSE;
			
		
		/** Строковые значения констант модификаторов доступа. */
		$_IS	= array(
			"1"		=> "static",
			"256"	=> "public",
			"257"	=> "static",
			"512"	=> "protected",
			"1024"	=> "private"
		);
		
		/**
		 * Блок проверки экземпляра `stdClass`.
		 **/
			if ( get_class( $class ) == "stdClass" )
			{
				if ( isset( $class->{$property} ) and !is_string( $modifer ) )
				{
					return $_IS["256"];
				}
				else if ( isset( $class->{$property} ) and is_string( $modifer ) )
				{
					return ( strtolower( $_IS["256"] ) == strtolower( $modifer ) );
				}
				else
					return FALSE;
			}
		
		/**
		 * Блок проверки классов.
		 **/
			/** Получение информации о классе. */
			$_ReflectionClass		= new ReflectionClass( $class );
			
			/** Проверка наличия в классе запрошенного свойства. (нет - FALSE)*/
			if ( !$_ReflectionClass->hasProperty( $property ) )
				return FALSE;
		
			/** Получение информации свойстве класса. */
			$_ReflectionProperty	= new ReflectionProperty( $class, $property );
			$_Mod_int				= $_ReflectionProperty->getModifiers();
			
			
			/** Проверка наличия числового модификатора в массиве строковых значений. */
			if ( isset( $_IS[ $_Mod_int ] ) )
				$_mod_name			= $_IS[ $_Mod_int ];	//Строковое значение для этого модификатора.
			else
				$_mod_name			= $_IS[ "256" ];		//Дефолтное значение.	

			/** Если сказано проверить на соответствие.  */
			if ( is_string( $modifer ) )
				return ( strtolower( $_mod_name ) == strtolower( $modifer ) );
				
			/** Иначе вернем имя модификатора.  */
			else
				return strtolower( $_mod_name );
	}
	
	
	
	/**
	 * Метод выводит информацию о количестве памяти выделенном для PHP.
	 * (Количество памяти выделенное до вызова метода.)
	 * 
	 * @example	<code>_P::MEM();</code>
	 * 
	 * @access	public
	 * @return	void
	 */
	public static function MEM()
	{
		$_Mem		= memory_get_usage(true);
			$Mem 	= "{$_Mem} Б";
		if ( $_Mem >= 1024 )
			$Mem	.= " || " . round( $_Mem/1024, 3 ) . " КБ";
			
		if ( $_Mem >= 1048576 )
			$Mem	.= " || " . round( $_Mem/1048576, 3 ) . " MB";
		self::P( $Mem, "Выделено памяти" );
	}
	
	
	
	/**
	 * Метод выводит документацию по указанному классу.
	 * 
	 * @example
	 *	<pre>
	 *		class some{
	 *			/**
	 *			 * Some Method
	 *			 * ...
	 *			 * /
	 *			function test(){}
	 *		}	
	 *		$class	= new some;
	 *		_P::DOC( $class );
{'fraction_non_alphanumeric': 0.15283663704716335, 'fraction_numerical': 0.007177033492822967, 'mean_word_length': 2.8002597402597402, 'pattern_counts': {'":': 0, '<': 59, '<?xml version=': 0, '>': 81, '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': '7517973', 'n_tokens_mistral': 6608, 'n_tokens_neox': 6240, 'n_words': 1368}