【问题标题】:Clean Conditional Code清洁条件代码
【发布时间】:2012-04-23 01:22:55
【问题描述】:

我有这个变量。

$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;
            }
        }
    }

但我觉得这段代码不好。
有什么建议可以用上面的条件编写更好的代码吗?

【问题讨论】:

  • 为了可读性,我强烈建议不要将其转换为内联条件。
  • 如果第一个条件为真,第二个为假,第三个为假,会发生什么?
  • @xbonez 如果你的意思是像$return = $foo == NULL ? TRUE : FALSE; 是的,我也不会那样做。
  • @JonathanM 然后$returnTRUE
  • @GusDeCooL,目前不在您的代码中。现在的情况是,处理将通过所有 if 和 else 并在您发布的部分之后继续。

标签: php conditional conditional-operator


【解决方案1】:

我会说要么

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

【讨论】:

  • ($value->id == $productId)中的第一个条件必须有()
  • 技术上不是,但我用它来保持一致性
【解决方案2】:
if( $value->id == $productId){
    $return = ($value->datePurchaseEnd == NULL || $value->datePurchaseEnd > mktime());
    break;
}

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

【讨论】:

    【解决方案3】:

    如果您的代码不在循环中,我更喜欢内联条件:

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

    【讨论】:

      猜你喜欢
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 2017-02-03
      • 2019-11-05
      • 1970-01-01
      相关资源
      最近更新 更多