Оптимизация кода PHP (попытка определить мин / макс / между случаями) - PullRequest
0 голосов
/ 07 января 2011

Я знаю, что этот бит кода не очень соответствует лучшим практикам кодирования, и пытался его улучшить, есть идеи?

if ($query['date_min'] != _get_date_today())
    $mode_min = true;
if ($query['date_max'] != _get_date_today())
    $mode_max = true;

if ($mode_max && $mode_min)
    $mode = "between";
elseif ($mode_max && !$mode_min)
    $mode = "max";
elseif (!$mode_max && $mode_min)
    $mode = "min";
else
    return;

if ($mode == "min" || $mode == "between") {
    $command_min = "A";
}
if ($mode == "max" || $mode == "between") {
    $command_max = "B";
}
if ($mode == "between") {
    $command = $command_min . " AND " . $command_max;
} else {
    if ($mode == "min")
        $command = $command_min;
    if ($mode == "max")
        $command = $command_max;
}

echo $command;

Решение:

$mode_min = ($query['date_min'] != _get_date_today());
$mode_max = ($query['date_max'] != _get_date_today());

if ($mode_min){
    $command_min = "A";
}
if ($mode_max) {
    $command_max = "B";
}
if ($mode_min && $mode_max) {
    $command = $command_min . " AND " . $command_max;
} else {
    if ($mode_min)
        $command = $command_min;
    if ($mode_max)
        $command = $command_max;
}

1 Ответ

2 голосов
/ 07 января 2011

Технически ваши переменные не определены, если условие не выполняется, поэтому я бы просто использовал:

$mod_min = ($query['date_min'] != _get_date_today());
$mod_max = ($query['date_max'] != _get_date_today());

Кроме того, почему вы определяете переменную $mode, нужна ли она где-то еще??Если нет, вы можете просто использовать $mod_min и $mod_max в своем последнем наборе if операторов.

Например:

if ($mode == "min" || $mode == "between")

, кажется, переводится в:

if ($mod_min)

Редактировать: Редактировать ваше последнее обновление:

$command_min = "A";
$command_max = "B";

if ($mode_min && $mode_max) {
    $command = $command_min . " AND " . $command_max;
}
elseif ($mode_min){
    $command = $command_min;
}
elseif ($mode_max) {
    $command = $command_max;
} else {
    return;
}
...