Оцените его пожалуйста как можно с разных сторон. Например стиль написания кода, оформление класса, ну и так далее.
Прошу не судить строго. Приму все конструктивные замечания.
Заранее всем огромное спасибо.
/**
* Date class file
* 'eng' = dd/mm/yyyy
* 'usa' = mm/dd/yyyy
* 'iso' = yyyy/mm/dd
* @author Rud*** Vlad**** <MrR****@****.com>
* @link http://www.
* @version 1.1.0, 13.11.2010
* @copyright Copyright 2010
*/
class RDate
{
protected $_date;
protected $_day,$_month,$_year;
protected $_format, $_formatEnd;
protected $_attributes;
const ENG = 'eng';
const USA = 'usa';
const ISO = 'iso';
/**
* _Split
* функция разбивает дату на дд мм гг в соответствии с указанным форматом
*/
protected function _Split()
{
$this->_date = str_replace(array('\'', '-', '.', ',', ' '), '/', $this->_date);
switch ($this->_format)
{
case self::ENG :
list($this->_day, $this->_month, $this->_year) = explode( '/', $this->_date);
break;
case self::USA :
list($this->_month, $this->_day, $this->_year) = explode( '/', $this->_date);
break;
case self::ISO :
list($this->_year, $this->_month, $this->_day) = explode( '/', $this->_date);
break;
default:
trigger_error('Critical error. Class does not work with the specified date format.', E_USER_WARNING);
}
}
/**
* _CheckEmpty
* функция проверяет заполнены ли обязательные параметры
*/
private function _CheckEmpty()
{
if ($this->_attributes == null)
{
trigger_error('Critical error. Empty Attributes.', E_USER_WARNING);
return false;
}
elseif ($this->_attributes['date'] == null)
{
trigger_error('Critical error. Empty Date Attribute.', E_USER_WARNING);
return false;
}
else return true;
}
/**
* ChangeFormat
* Функция меняет формат даты
* @param array $attributes (date-обязательный параметр,необязательные параметры:
* formatBegin-начальный формат даты, formatEnd-конечный формат,
* mask-каким символом будут отделены части даты)
* @return string
*/
public function ChangeFormat($attributes = null)
{
$this->_attributes = $attributes;
// проверяем заполнены ли обязательные параметры
if (!$this->_CheckEmpty()) return false;
$this->_date = $this->_attributes['date'];
// в случае если дополнительные параметры не указаны, присваиваем им значение по умолчанию
$this->_format = isset($this->_attributes['formatBegin']) ? strtolower($this->_attributes['formatBegin']) : self::ENG;
$this->_formatEnd = isset($this->_attributes['formatEnd']) ? strtolower($this->_attributes['formatEnd']) : self::ISO;
$mask = isset($this->_attributes['mask']) ? $this->_attributes['mask'] : '.';
$this->_Split();
// формируем дату в соответствии с указанным форматом
switch ($this->_formatEnd)
{
case self::ENG :
$this->_date = $this->_day.$mask.$this->_month.$mask.$this->_year;
break;
case self::USA :
$this->_date = $this->_month.$mask.$this->_day.$mask.$this->_year;
break;
case self::ISO :
$this->_date = $this->_year.$mask.$this->_month.$mask.$this->_day;
break;
default:
trigger_error('Critical error. Class does not work with the specified date format.', E_USER_WARNING);
}
return $this->_date;
}
Спустя 56 минут, 46 секунд (15.11.2010 - 09:08) twin написал(а):
Оформлено красиво. Стиль выдержан, код читабелен, комментарии по делу.
Весьма недурно.
По функционалу - хуже.
Начнем с того, что класс решает давным давно решенные задачи. Это можно сделать парой штатных функций, ну или воспользоваться встроенным классом DateTime
В целях обучения конечно пойдет и так, но время можно было бы потратить с большей пользой.
Дальше
Передавать параметры массивом не очень удачное решение. Совсем недавно обсуждалось
Скобку потерял закрывающую. :)
Но для начала более чем хорошо.
Весьма недурно.
По функционалу - хуже.
Начнем с того, что класс решает давным давно решенные задачи. Это можно сделать парой штатных функций, ну или воспользоваться встроенным классом DateTime
В целях обучения конечно пойдет и так, но время можно было бы потратить с большей пользой.
Дальше
public function ChangeFormat($attributes = null)
Передавать параметры массивом не очень удачное решение. Совсем недавно обсуждалось
Скобку потерял закрывающую. :)
Но для начала более чем хорошо.
Спустя 10 минут, 24 секунды (15.11.2010 - 09:19) linker написал(а):
Добавлю от себя, генери Exception, а не ошибки.
Спустя 32 минуты, 19 секунд (15.11.2010 - 09:51) MrRiving написал(а):
Спасибо, что так оперативно откликнулись. Класс разрабатывается для достижения 2 задач: разобраться с ООП и создать класс "запилинный" под свои конкретные нужды.
Например я обычно работаю с датами следующего формата: дд.мм.гггг, и для того чтобы проверить ее, мне достаточно одной строки RDate::MyStaticCheckDateEng('21.11.2010')
Например я обычно работаю с датами следующего формата: дд.мм.гггг, и для того чтобы проверить ее, мне достаточно одной строки RDate::MyStaticCheckDateEng('21.11.2010')
Цитата |
twin Скобку потерял закрывающую. :) |
Если вы про закрывающую скобку класса, то это не конец его. В продолжении следующее:
public function CheckDate($date,$format = self::ENG)
{
$this->_date = $date;
$this->_format = strtolower($format);
$this->_Split();
return checkdate( $this->_month, $this->_day, $this->_year);
}
public static function MyStaticCheckDateEng($date)
{
list($day, $month, $year) = explode ('.',$date);
return checkdate( $month, $day, $year);
}
}
На счет Exception - спасибо. Попробую переделать
И еще, подскажите пожалуйста, есть ли способы проверить корректность даты какими-то стандартными функциями?
Спустя 14 минут, 49 секунд (15.11.2010 - 10:06) Йакуд написал(а):
MrRiving, да, есть способ. Функция checkdate
Синтаксис :
Возвращает true, если дата правильная.
Синтаксис :
int checkdate(int month, int day, int year);
Возвращает true, если дата правильная.
Спустя 4 минуты, 24 секунды (15.11.2010 - 10:10) MrRiving написал(а):
Если посмотрите вверх, то вы ее у меня увидите, но в ней есть недостаток- в качестве параметров я сам должен указать ей месяц день год, но каждый раз мне делать этого не хочется.
Вот поэтому и решил написать свой класс.
Вот поэтому и решил написать свой класс.
Спустя 3 минуты, 25 секунд (15.11.2010 - 10:14) twin написал(а):
Цитата |
я сам должен указать ей месяц день год, но каждый раз мне делать этого не хочется. Вот поэтому и решил написать свой класс. |
Ну с этим понятно, а остальное зачем так сложно...
Спустя 6 минут, 16 секунд (15.11.2010 - 10:20) MrRiving написал(а):
Цитата |
Меня нельзя назвать опытным программистом на php |
А кокой может быть опыт без практики? Вот и практикуюсь...