Прошу оценить функцию

Кром

Новичок
я бы вот так сделал генерацию

PHP:
$x == $day ? $sel="selected" : $sel="" ;
$string .= "\n<option value=". $x ." ".$sel.">". $x. "</option>";
 

Screjet

Новичок
Re: Прошу проревьювить функцию

Юзайте наздоровье, кто разберется - тому пятерка
PHP:
<?
// пример переделан для наглядности
class dateSelector {
	
	function makeSelector(&$string, $name, $range, $now, $values = false){
		
		$string .= '<select name="'.$name.'">'."\n";
		list($min, $max) = explode('-',$range);
		
		for ($i = $min; $i <= $max; $i++){
			$string .= "\t".'<option value="'.$i.'"';
			if ($i == $now[$name]) $string .= ' selected';
			$string .= '>';
			if ($values) $string .= $values[$i];
			else $string .= $i;
			$string .= '</option>'."\n";
		}
		
		$string .= '</select>'."\n";
	}

	function dateSelector( &$string, $required, $timestamp = false ){
		
		if ( !$timestamp ) $timestamp = time();
		$now = getdate($timestamp);
		
		foreach ( $required as $name => $range ){
			if ( is_array($range) ){
				$this->makeSelector( $string, $name, $range[0], $now, $range[1] );
			} else {
				$this->makeSelector( $string, $name, $range, $now );
			}
		}//end foreach();
	}//end dateSelector();

}

$months = array(1=>"Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь");

$my_out = '';
//обращаем внимание, что select'ы можно выводить в любой последовательности
new dateSelector(	$my_out,
	array(	'mday'=>'1-31',
					'mon'=>array('1-12', $months),
					'year'=>'1999-2005',
					'hours'=>'0-23',
					'minutes'=>'0-59',
					'seconds'=>'0-59'
				)
	//, $timestamp
	);

echo $my_out;
?>
 

RomikChef

Guest
кром, ну и что ты такого принципиально нового сказал?
ты в состоянии понять, что здесь не обсуждают проблемы составления строк?
или это едиснственное, что тебе понятно из этого треда?
ну так и не суйся тогда вообще!
 

Bartman

Новичок
RomikChef, да, так значительно короче... осталось мне только всё это осмыслить :)
 

Кром

Новичок
Почему не обсуждаются проблемы составления строк?
Автор написал, что принимаются любые предложения и замечания.
 

RomikChef

Guest
Screjet, у тебя получается универсальнее в принципе, но неудобнее в частных случаях.

вызов у Bartmana получается гораздо короче, чем у тебя.
и читабельность повышается.
писать каждый раз при вызове функции, что в минуте 60 секунд, а в месяце - 31 день, на мой вгляд, несколько нерационально.
а вот функция makeSelector придумана правильно.
 

Screjet

Новичок
2RomikChef,

обрати внимание, что сий класс можно юзать и не обязательно с датами :)
 

RomikChef

Guest
я на все обратил внимание.
в отличие от тебя. и все написал.
если у кого-то нехватает чего-то чтобы понять, то это не мои проблемы.
 

Screjet

Новичок
Автор оригинала: RomikChef
писать каждый раз при вызове функции, что в минуте 60 секунд, а в месяце - 31 день, на мой вгляд, несколько нерационально.
PHP:
function wrapperDateSelector( $timestamp = false ){
	
	$my_out = '';
	new dateSelector(	$my_out,
		array(	'mday'=>'1-31',
						'mon'=>array('1-12', $GLOBALS['months']),
						'year'=>'1999-2005',
						'hours'=>'0-23',
						'minutes'=>'0-59',
						'seconds'=>'0-59'
					),
		$timestamp
	);
	
	echo $my_out;
}

// вызов
wrapperDateSelector();
 
Сверху