2012-04-10 76 views
0

我有這個變量。清潔條件代碼

$productId = 2; // Testing ID 
$value->id; // Contains INT 
$value->datePurchaseEnd; // Contains UNIXTIME or NULL 

有條件我想做。 if ($value->id == $productId) return true;

但如果$value->datePurchaseEnd;NULL然後也與當前時間進行比較,它必須比目前的時間才能恢復TRUE更大;

現在,這是我做的代碼:

if($value->id == $productId){ 
     if($value->datePurchaseEnd == NULL){ 
      $return = TRUE; break; 
     }else{ 
      if($value->datePurchaseEnd > mktime()){ 
       $return = TRUE; break; 
      } 
     } 
    } 

,但我覺得這個代碼是不好的。
有沒有任何建議使上面的條件更好的代碼?

+0

我強烈建議不要轉換爲內聯有條件本作可讀性的原因。 – xbonez 2012-04-10 18:08:40

+0

如果第一個條件是真的,第二個是假的,第三個是假的,會發生什麼? – 2012-04-10 18:10:03

+0

@xbonez如果內聯的意思就像'$ return = $ foo == NULL? TRUE:FALSE;'是的,我也不會那樣做。 – GusDeCooL 2012-04-10 18:10:50

回答

6

我會說要麼

if(($value->id == $productId) && ($value->datePurchaseEnd == NULL || $value->datePurchaseEnd > mktime())) { 
     $return = true; 
     break; 
} 

if($value->id == $productId) { 
    if($value->datePurchaseEnd == NULL || $value->datePurchaseEnd > mktime()) { 
     $return = true; 
     break; 
    } 
} 

取決於如有條件,需要一個else

+1

擊敗我秒! – 2012-04-10 18:09:37

+0

在'($ value-> id == $ productId)''中爲第一個條件使用'()'是強制的嗎? – GusDeCooL 2012-04-10 18:13:11

+0

不是技術上的,而是我爲了一致性而使用它 – nathanjosiah 2012-04-10 18:14:09

2
if($value->id == $productId){ 
    $return = ($value->datePurchaseEnd == NULL || $value->datePurchaseEnd > mktime()); 
    break; 
} 

$return = $value->id == $productId && ($value->datePurchaseEnd == NULL || $value->datePurchaseEnd > mktime()); 
break; 
0

如果你的代碼是不是在一個循環,我不喜歡內嵌條件:

return $value->id == $productId && ($value->datePurchaseEnd == null || $value->datePurchaseEnd > mktime())