[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Анализ написанного класса
MrRiving
Меня нельзя назвать опытным программистом на php, но я решил, что настало время разобраться с ООП. И вот мой, можно так сказать, первый опыт...
Оцените его пожалуйста как можно с разных сторон. Например стиль написания кода, оформление класса, ну и так далее.
Прошу не судить строго. Приму все конструктивные замечания.
Заранее всем огромное спасибо.

/**
* 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

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

Дальше
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')


Цитата
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
Синтаксис :
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

А кокой может быть опыт без практики? Вот и практикуюсь... rolleyes.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.