php, как упростить скрипт php? - PullRequest
3 голосов
/ 04 октября 2011

я не уверен, что это хороший вопрос для публикации, но вот моя проблема.У меня есть if заявление, которое становится слишком длинным, и мне было интересно, есть ли какой-то другой вид синтаксиса, чтобы сократить его:

if (($time1 <= $one_day)&&
    ($time2 <= $one_day)&&
    ($time3 <= $one_day)&&
    ($time4 <= $one_day)&&
    ($time5 <= $one_day)&&
    ($time1 != NULL)&&
    ($time2 != NULL)&&
    ($time3 != NULL)&&
    ($time4 != NULL)&&
    ($time5 != NULL)){
    //do sometihng
}

это один пример, но у меня есть похожий, которыйдоходит до ..&&($time15 <= $one_day).

утверждение довольно самоочевидно, $time1, $time2, etc может вернуться пустым, поэтому я должен проверить, являются ли они NULL или нет

какие-либо идеи?

спасибо

Ответы [ 7 ]

3 голосов
/ 04 октября 2011

Вы можете поместить обычные вещи в функцию:

function validate_time($time, $one_day) {
    return $time <= $one_day && $time != NULL;
}
if (validate_time($time1, $one_day) &&
    validate_time($time2, $one_day) &&
    validate_time($time3, $one_day) &&
    validate_time($time4, $one_day) &&
    validate_time($time5, $one_day)) {
    // do something
}

Возможно, вы захотите изменить код и устранить необходимость в копировании и вставке этих проверок. Еще один способ выполнить работу:

while (true) {
    foreach (array($time1, $time2, $time3, $time4, $time5) as $time) {
        if ($time > $one_day || $time == NULL) {
            break 2;
        }
    }
    // do something
    break;
}

Вышесказанное также можно поместить в функцию, которая сделает цикл while и ключевое слово break избыточным. Замените break 2 на возврат, затем.

2 голосов
/ 04 октября 2011

Использование массива для ваших переменных поможет.Вы можете перебрать их и проверить.

1 голос
/ 04 октября 2011

Если вы должны (или хотите) сохранить исходные имена переменных и не использовать массив, вот хорошее решение (для $ time1 до $ time5):

$ok = true;
for ($i = 1; $i <= 5; $i++)
{
    $var =& ${'time'.$i};
    if ( ! ($var <= $one_day && $var != NULL))
    {
        $ok = false;
    }
}

if ($ok)
{
    //do something
}
1 голос
/ 04 октября 2011

Вместо использования 15 похожих, но разных переменных рассмотрите возможность использования массива.

1 голос
/ 04 октября 2011

Положите время в массив и сделайте проверку for.

0 голосов
/ 04 октября 2011

Функциональная версия, которая должна помочь с повторным использованием. Это похоже на код Lekensteyns.

$times = array(
    'time',
    'time',
    'time',
    'time',
    'time',
);

function validateTime($checks, $limit) 
{
    foreach($checks as $check) {
        if($check == null || $check > $limit) {
            return false;
        }
    }
    return true;
}

if(validateTime($times,$one_day) == true) {
  //codey code.
}
0 голосов
/ 04 октября 2011

Вы можете установить все значения в массив и сравнить его с помощью цикла For.

...