|
|
|
|
|
для: Лена
(10.11.2010 в 22:44)
| | Спасибо, головой то можно подумать, но код не мой мне дали его проработать. Но честно просто нет уже сил и я не на столько хорошо пока разбираюсь, что бы это сделать быстро как Вы. Поэтому попросил помощи. | |
|
|
|
|
|
|
|
для: psychomc
(10.11.2010 в 22:52)
| | тут полиморфизм не подойдет, слишком много классов-наследников может быть... Форматов же даты можно сколько угодно штамповать. Я ниже поправилась, нашла оптимальней вариант - просто передавать в метод динамический формат. | |
|
|
|
|
|
|
|
для: Лена
(10.11.2010 в 22:44)
| | не смотрел код
>Вообще-то мне эти классы с датой не очень нравятся. Зачем создавать ради конвертирования даты целый класс...
полиморфизм, при правильном проектировании позволяет избавлять код от условных операторов и делает его более прозрачным | |
|
|
|
|
|
|
|
для: magic
(10.11.2010 в 16:41)
| | Ищите различия
<?php
abstract class dateUtil{
static function a1();
}
class dateUtil1 extends dateUtil{
static function a1($timestampDate) {
return date('d.m.Y', $timestampDate);
}
}
class dateUtil2 extends dateUtil{
static function a1($timestampDate) {
return date('d/m/Y', $timestampDate);
}
}
class dateUtil3 extends dateUtil{
static function a1($timestampDate) {
return date('m/d/Y', $timestampDate);
}
}
class dateUtil4 extends dateUtil{
static function a1($timestampDate) {
return date('d/m/Y', $timestampDate);
}
}
class dateUtil4 extends dateUtil{
static function a1($timestampDate) {
return date('Y-m-d', $timestampDate);
}
}
abstract class cityUtil{
static function get_nice_city_id();
}
class cityUtil1 extends cityUtil{
static function get_nice_city_id($id) {
return $id + 2; // Процедура конвертирования кода города из нашего в формат nice-weather.com.
}
}
class cityUtil2 extends cityUtil{
static function get_nice_city_id($id) {
return $id + 3; // Процедура конвертирования кода города из нашего в формата в другой формат ...
}
}
/**
* здесь - коммент, чем занимается класс и какая от него польза :)
*/
class WeatherTaker{
const TYPE_BEST_WEATHER_COM = 1;
const TYPE_NICE_WEATHER_COM = 2;
const TYPE_NO_MORE_RAIN_NET = 3;
/**
* здесь должен быть коммент, что содержит это приватное свойство
* @var string
*/
private $_type;
function __construct($type) {
$this->_type = $type;
}
/**
* Возвращает температуры за указанный период.
* @param string $city
* @param string $fromDate - YYYY-MM-DD
* @param string $to_date - YYYY-MM-DD
**/
function get_temperatures($city, $fromDate, $to_date) {
global $USER;
for($date = strtotime($fromDate); $date <= strtotime($to_date); $date = strtotime('+1day', $date)) {
switch($this->_type) {
case self::TYPE_BEST_WEATHER_COM:
$url = 'http://best-weather.com/?date=' . dateUtil3::a1($date) . '&city=$city';
if($_GET['night'])
$url .= '&night=1';
$result = file_get_contents($url);
$temperature = .... // Разбор температуры опущен для краткости
break;
case self::TYPE_NICE_WEATHER_COM:
$url = 'http://nice-weather.com/?date=' .dateUtil2::a1($date) . "&cityId={cityUtil1::get_nice_city_id($city)}";
if($_GET['night'])
$url .= '&night=1';
$result = file_get_contents($url);
$temperature = .... // Разбор температуры опущен для краткости
break;
case self::TYPE_NO_MORE_RAIN_NET:
$url = 'http://no-more-rain.net/?date=' . dateUtil4::a1($date) . '&cityId=$city';
if($_GET['night'])
$url .= '&night=1';
$result = file_get_contents($url);
$temperature = .... // Разбор температуры опущен для краткости
break;
}
if ($USER->likesCelsius)
$temperature = convertToCelcius($temperature);
$result[] = array('date' => $this->a1($date), 'temperature' => $temperature);
}
return $result;
}
function getWind($city, $fromDate, $toDate) {
// ....
}
}
?>
|
Делала быстро, могла где-то ошибиться.
Не понятно, зачем global $USER; - обычно такое держат в объектах реестра.
И не понятно, как вам пришло в голову class WeatherTaker extends date_util
Даже если ничего не разбираться в программировании, можно подумать хотя бы головой. У вас погода и дата. Какое понятие уже, а какое обширней? И которое из них использует другое?
Вообще-то мне эти классы с датой не очень нравятся. Зачем создавать ради конвертирования даты целый класс...
Вообще-то лучше наверное создать для даты один класс, как у вас и было:
class dateUtil1{
static function a1($format,$timestampDate) {
return date($format, $timestampDate);
}
}
|
и передавать в метод нужный формат.
Например, dateUtil1::a1('d/m/Y',$timestampDate);
И точно так же с class cityUtil1 | |
|
|
|
|
|
|
| Помогите разобраться. Ниже приводится фрагмент кода, который предназначен для опроса сайтов погоды и получения различных характеристик погоды. В этом коде есть много проблем (порядка 15-20, но это наверняка не все), проблемы самые разные, серьёзные и не очень. Что вам не нравится в этом коде? Как это можно исправить
<?php
class date_util {
function a1($timestampDate) {
return date('d.m.Y', $timestampDate);
}
function get_nice_city_id($id) {
return $id + 2; // Процедура конвертирования кода города из нашего в формат nice-weather.com.
}
}
class WeatherTaker extends date_util {
const TYPE_BEST_WEATHER_COM = 1;
const TYPE_NICE_WEATHER_COM = 2;
const TYPE_NO_MORE_RAIN_NET = 3;
private $_type;
function __construct($type) {
$this->_type = $type;
}
/**
* Возвращает температуры за указанный период.
* Даты на вход задаются в формате YYYY-MM-DD.
**/
function get_temperatures($city, $fromDate, $to_date) {
global $USER;
for($date = strtotime($fromDate); $date <= strtotime($to_date); $date = strtotime('+1day', $date)) {
switch($this->_type) {
case self::TYPE_BEST_WEATHER_COM:
$url = 'http://best-weather.com/?date=' . date('m/d/Y', $date) . '&city=$city';
if($_GET['night'])
$url .= '&night=1';
$result = file_get_contents($url);
$temperature = .... // Разбор температуры опущен для краткости
break;
case self::TYPE_NICE_WEATHER_COM:
$url = 'http://nice-weather.com/?date=' . date('d/m/Y', $date) . "&cityId={$this->get_nice_city_id($city)}";
if($_GET['night'])
$url .= '&night=1';
$result = file_get_contents($url);
$temperature = .... // Разбор температуры опущен для краткости
break;
case self::TYPE_NO_MORE_RAIN_NET:
$url = 'http://no-more-rain.net/?date=' . date('Y-m-d', $date) . '&cityId=$city';
if($_GET['night'])
$url .= '&night=1';
$result = file_get_contents($url);
$temperature = .... // Разбор температуры опущен для краткости
break;
}
if ($USER->likesCelsius)
$temperature = convertToCelcius($temperature);
$result[] = array('date' => $this->a1($date), 'temperature' => $temperature);
}
return $result;
}
function getPresure($city, $fromDate, $toDate) {
for($date = strtotime($fromDate); $date <= strtotime($to_date); $date = strtotime('+1day', $date)) {
switch($this->_type) {
case self::TYPE_BEST_WEATHER_COM:
$url = 'http://best-weather.com/?type=presure&date=' . date('m/d/Y', $date) . '&city=$city';
$result = file_get_contents($url);
$presure = .... // Разбор давления опущен для краткости
break;
case self::TYPE_NICE_WEATHER_COM:
$url = 'http://nice-weather.com/?type=presure&date=' . date('d/m/Y', $date) . "&cityId={$this->get_nice_city_id($city)}";
$result = file_get_contents($url);
$presure = .... // Разбор давления опущен для краткости
break;
case self::TYPE_NO_MORE_RAIN_NET:
$url = 'http://no-more-rain.net/?type=presure&date=' . date('Y-m-d', $date) . '&cityId=$city';
$result = file_get_contents($url);
$presure = .... // Разбор давления опущен для краткости
break;
}
$result[] = array('date' => $this->a1($date), 'presure' => $presure);
}
return $result;
}
function getWind($city, $fromDate, $toDate) {
// ....
}
}
?>
|
----------------------------------------------------------------
Честно сказать это тестовое задание. Уже на столько ответил вопросов, "хавайся". Помогите с этим заданием. Для меня здесь работы "не фига себе". | |
|
|
|
|