3

これが投稿するのに良い質問かどうかはわかりませんが、ここに私の問題があります。ステートメントが長すぎて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かどうかを確認する必要があります

何か案は?

ありがとう

4

7 に答える 7

3

共通のものを関数に入れることができます:

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その後、返品交換。

于 2011-10-04T16:55:46.213 に答える
2

変数に配列を使用すると役立ちます。それらを繰り返して確認することができます。

于 2011-10-04T16:56:26.447 に答える
1

元の変数名を保持する必要がある(または保持したい)場合は、ここで配列を使用しないことをお勧めします($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
}
于 2011-10-04T17:05:52.010 に答える
1

時間を配列に入れてfor、チェックを行うループを作成します。

于 2011-10-04T16:56:33.437 に答える
1

15 個の類似しているが異なる変数を使用する代わりに、配列の使用を検討してください。

于 2011-10-04T16:56:45.683 に答える
0

再利用に役立つ機能化されたバージョン。これは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.
}
于 2011-10-04T17:31:08.203 に答える
0

すべての値を配列に設定し、Forループを使用して比較できます。

于 2011-10-04T16:57:27.303 に答える