IniKeeper - критика

  • Автор темы Адам Адамович
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.

Адам Адамович

Guest
IniKeeper - критика

Выставляю на критику :)
PHP:
<?php
/**
* @date: 04.09.2005
* @name: IniKeeper
* @version: 0.4 betta
* @soft: Zend Optimazier, Zend Debugger, Zend Development Environment
* @example: $INI=new IniKeeper();
*/


/**
 * @name: IniKeeper
 * 
 */

class IniKeeper
{
	/**
	 * Расположение INI файла
	 *
	 * @var string
	 */
	var $_FILE_;
	/**
	 * Переменные INI файла
	 *
	 * @var array
	 */
	var $VARS=array();
	/**
	 * Автосохранение INI файла после внесения изменений
	 *
	 * @var boolean
	 */
	var $AUTOSAVE=false;
	/**
	 * Автоматическое создание секции, при присвоении
	 * значения ключу в несуществующей секции
	 *
	 * @var boolean
	 */
	var $AUTOCREATESECTION=false;
	/**
	 * Защищенный режим INI файла
	 *
	 * @var boolean
	 */
	var $PROTECTMODE=false;
	/**
	 * @desc Инициализация INI файла
	 *
	 * @param string $file
	 * @return boolean
	 * @version 1.0 betta 
	 */

function create($file,$autosave=false,$autocreatesection=false)
	{
		if($autocreatesection) $this->AUTOCREATESECTION=$autocreatesection;
		// Если пользователь включил функцию авто создания секции - сделать её глобальной
		if($autosave) $this->AUTOSAVE=$autosave;  
		// Если пользователь включил функцию автосохранения - сделать её глобальной
		if($file==='')
		// Если имя файла пустое 
		{
			$this->_FILE_=false; 
			return false; 
		} 
		if(!preg_match("/^[a-zA-Zа-яА-Я0-9\/\._-]{0,}$/",$file))
		// Если имя файла не правильно
		{ 
			$this->_FILE_=''; 
			return false; 
		}		
		if(!file_exists($file))
		// Если файл отсутствует
		{ 
			$this->_FILE_=false; 
			return false; 
		}
		$this->_FILE_=$file; 
		// Сделать путь к файлу глобальным
		$this->VARS=parse_ini_file($file,true);
		// Разбираем INI файл и делаем его переменные глобальными
		return true;
	}

/**
 * Удалить секцию значений
 *
 * @param string(Секция) $section
 * @return boolean
 */
function delSection($section)
	{
		if (!sectionExist($section)) return false;
		// Если секция отсутствует в списке
		unset($this->VARS[$section]);
		// Удаляем секцию
		if($this->AUTOSAVE) $this->save();
		// Если автосохранение включено - сохранить
		return true;
	}

/**
 * Удалить ключ
 *
 * @param string(Секция) $section
 * @param string(Ключ) $key
 * @return boolean
 */
function delKey($section,$key)
	{
		if (!sectionExist($section)) return false;
		// Если секция есть в списке
		if (!keyExist($section,$key)) return false;
		// Если ключ есть в списке
		unset($this->VARS[$section][$key]);
		// Удаляем ключ 
		if($this->AUTOSAVE) $this->save();
		// Если автосохранение включено - сохранить
		return true;

	}

/**
 * Сохранить значения в файл
 *
 * @param void
 * @return boolean
 */
function save()
	{
		if(!$this->_FILE_) return false; 
		// Если имя файла небыло объявленно ранее
		$fp=fopen($this->_FILE_,"w");
		// Открываем для записи
		if($this->PROTECTMODE){
			$buffer="<?PHP /* \n";
		}else{
			$buffer='';
		}
		// Создаем пустой буфер
		foreach ( $this->VARS as $section=>$item) {
			$buffer.="[$section]\n";
			// Сначала записываем в буфер имя секции
			foreach ( $item as $key=>$val) {
				$buffer.="$key = \"$val\"\n";
				// Потом ее содержимое
			}
		}
		if($this->PROTECTMODE){
			$buffer.="*/ ?>";
		}
		fwrite($fp,$buffer);
		// Записываем буфер в файл
		fclose($fp);
		// Закрываем файл
	}
	
/**
 * Считать значение ключа секции
 *
 * @param string(Секция) $section
 * @param strong(Ключ) $key
 * @return boolean
 */
function getVal($section=null,$key=null,$default=null)
	{
		if (!sectionExist($section)) return $default;
		// Если секция есть в списке
		if (!keyExist($section,$key)) return $default;
		// Если ключ есть в списке
		return $this->VARS[$section][$key];
		// Вернем значение ключа
	}

/**
 * Установить значение ключа 
 *
 * @param string(Секция) $section
 * @param string(Ключ) $key
 * @param string(Значение) $value
 * @return boolean
 */
function setVal($section=null,$key=null,$value=null)
	{
		if (!sectionExist($section)) 
		{ 
			if($this->AUTOCREATESECTION) { 
				$this->createSection($section); 
			} 
		}else{
			return false;
		}
		// Если секция есть в списке
		$this->VARS[$section][$key]=$value;
		// Устанавливаем ее значение
		if($this->AUTOSAVE) $this->save();
		// Если автосохранение включено - сохранить
		return true;
	}
	
/**
 * Создать новую секцию
 *
 * @param string(Имя новой секции) $section
 * @return boolean
 */
function createSection($section=null)
	{
		if (sectionExist($section)) return false;
		// Если секция есть в списке
		array_push($this->VARS,$section);
		// Создаем секцию
		if($this->AUTOSAVE) $this->save();
		// Если автосохранение включено - сохранить
		return true;
	}
	
/**
 * Прочитать все ключи в секции
 *
 * @param string(Секция) $section
 * @return array(Ключи)
 */
function listKeys($section=null)
	{
		if (!sectionExist($section)) return false;
		// Если секция есть в списке
		$buffer=array();
		foreach ( $this->VARS[$section] as $key=>$val) {
			$buffer[$key]=$val;
			// Добавляем значение вбуффер
		}
		return $buffer;

	}
	
/**
 * Прочитать все секции
 *
 * @return array(Секции)
 */
function listSections()
	{
		return array_keys($this->VARS);
	}

/**
 * Проверка существования ключа в секции
 *
 * @param string(Секция) $section
 * @param string(Ключ) $key
 * @return boolean
 */
function keyExist($section,$key)
	{
		if (!sectionExist($section)) return false;
		// Если секция есть в списке
		if (in_array( $key, array_keys($this->VARS[$section]))===false) return false;
		// Если ключ есть в списке
		return true;

	}
	

/**
 * Проверка существования секции
 *
 * @param string(Секция) $section
 * @return boolean
 */
function sectionExist($section)
	{
		if (in_array( $section, array_keys($this->VARS))===false) return false;
		// Если секция есть в списке
		return true;

	}

/**
 * Отчистить секцию
 *
 * @param string(Секция) $section
 * @param boolean(Создавать ли новую, если небыла создана ранее) $orcreate
 * @return boolean
 */
function eraseSection($section,$orcreate=false)
	{
		if(sectionExist($section))
		// Если секция уже есть
		{
			unset($this->VARS[$section]);
			// Удалить существующую
			$this->VARS[$section]=array();
			// Создать новую
			return true;
		}else{
			if ($orcreate){ 
				$this->VARS[$section]=array();
				// Создать новую
				return true;
			}else{
			return false;
			}
		}
	}
	
/**
 * Создать новый INI файл
 *
 * @param string(Файл) $file
 * @param boolean(Указыает, открывать ли файл после создания) $andopen
 * @return boolean
 */
function createIni($file,$andopen=false)
	{
		if(file_exists($file)) return false;
		// Если файл есть 
		$fp=fopen($file,"w+");
		// Создать файл
		fclose($fp);
		// Закрыть файл
		if($andopen) $this->create($file,false,false);
		// Если включена функция авто открытия - открыть
	}
/**
 * Обнулить модуль
 *
 * @return boolean
 */
function free()
	{
		$this->_FILE_=false;
		$this->AUTOCREATESECTION=false;
		$this->AUTOSAVE=false;
		$this->PROTECTMODE=false;
		$this->VARS=array();
		return true;
	}
}

?>
 

Адам Адамович

Guest
Класс для работы с INI файлами.
 

xionik

Новичок
а зачем эта самая страсть для работы с ini файлами мне может понадобиться?
 

Адам Адамович

Guest
Я прошу вас раскритиковать а не применять в своем деле :)
 

xionik

Новичок
Ну что бы критиковать не пустословно, я хотел бы знать хоть несколько жизненных применений сему классу.
 

Адам Адамович

Guest
Если класс переживет недельную критику - я покажу пару применений.
 

xionik

Новичок
Но ты его сам-то хоть где-то используешь, или начнешь только через недельку?
 

Адам Адамович

Guest
Я ведь уже объяснил, что если народ сочтет его съедобным для применения - тогда я покажу пару примеров использования
 

ForJest

- свежая кровь
Тема закрыта.

Формулируйте вопрос так, чтобы его могли понять не только Вы.
Не пишите больше 10-15 строк кода.
Никто не будет вникать в Ваш код длиной 100 строк.
Правила форума: http://phpclub.ru/talk/announcement.php?s=&forumid=12
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху