Сначала, пожалуйста, пожалуйста, выньте свои жестко закодированные числа и поместите их в константы.
$FLIGHT_START_TIME = 1258956001;
$FLIGHT_END_TIME = 1260511201;
Во-вторых, я бы сделал мини-функции для каждого из условий:
т.е.
function isFlying($time)
{
return ( $FLIGHT_START_TIME < $time && $time < $FLIGHT_END_TIME );
}
В-третьих, возьмите весь свой набор условий и поместите его в функцию, чтобы получить текущее состояние, и замените вызовы функций:
function getStateArrayForTime($time)
{
if (isDriving($time)
{
return $driving;
}
if ( isFlying($time) )
{
return $flying;
}
...etc
}
И наконец, замените весь встроенный раздел кода своим единственным вызовом функции:
$currentState = getStateArrayForTime($now);
Как прокомментировали и другие авторы, на данный момент вы можете использовать функцию, управляемую таблицей данных, для возврата состояния, если вы знаете, что параметрами состояния будут только время начала и окончания:
поэтому замените реализацию getStateArrayForTime на:
function getStateArrayForTime ($time)
{
//
$states = array (
array("startTime" => 1258956001, "endTime" => 1260511201, "state" => $flying),
array("startTime" => 1260511201, "endTime" => 1260517000, "state" => $driving),
..etc...
);
foreach($states as $checkStateArray)
{
if($checkStateArray['startTime'] < $time && $time < $checkStateArray['endTime'])
{
return $checkStateArray['state'];
}
}
return null;
}
Наконец, некоторые люди могут спросить: «Зачем делать вещи в таком порядке?» Я не могу претендовать на кредит вообще, кроме как в приложении, но у Мартина Фаулера есть замечательная книга под названием «Рефакторинг», которая объясняет, почему вы очищаете код по одному шагу за раз, и тестируете на каждом этапе пути, а затем, наконец заменяйте функции оптом, которые не имеют смысла, все время проверяя, что они функционально эквивалентны.