PHP IF语句,哪种方式更好?

时间:2018-02-13 06:03:57

标签: php if-statement

我对PHP相对较新,并且一直在使用它。

我有一个简单的例子,希望得到你的意见。

我一直在使用需要多个if语句来显示或隐藏某些内容的代码。

对于if语句,哪个更好?

if ($active) {

    if ($paid) {

        return $amount;

    } else {
        return 'You have not paid';
    }

} else {
    return 'You are not active';
}

if(!$active) { 
   return 'You are not active';
   exit();
)

if(!$paid){
   return 'You have not paid';
   exit();
}

return $amount;

我问这个的原因是,如果我有大约5件事需要真实来展示某件事,我不想将我的代码封装在5个if语句中,它可能很快就会变得混乱。

为了详细说明,我正在为餐馆创建一个测试在线订购系统,访客应该能够看到可用的优惠。

这些交易受到以下限制: 1)如果他们是活跃的 2)如果允许他们今天出现 3)如果他们可以在当前时间显示(因为交易可以在一天的时间限制) 4)如果他们正在接送或送货。

所以,基本上,我正在运行我所有交易的foreach循环,然后检查它们是否符合条件,如果它们没有,则循环继续运行直到它显示可用的交易,匹配所有标准。

PS。我正在使用Laravel,所以你可能会看到一些不是普通PHP的东西(比如Session)

foreach ($deals as $deal){


                // If deal is NOT active, continue.
                if ($deal->active !== 1) { continue; }


                // If deal is NOT available today, continue.
                if(!in_array($today, $availabledays)) { continue; } // End if deal is available today



                // If order set to pickup and deal does not allow pickup
                if(($deal->pickup) && (Session::get('ordermethod') !== 'pickup')){

                    continue;
                }

                // If order set to delivery and deal does not allow delivery
                if(($deal->delivery) && (Session::get('ordermethod') !== 'delivery'))
                    {

                        continue;
                    }


                // If deal does not allow delivery or pickup
                if( (!$deal->pickup) && (!$deal->delivery) )
                {
                    continue;
                }


 // SHOW REST OF DEAL CODE HERE


}

上面的解决方案确实有效,但我一直担心,也许我没有以正确的方式做到这一点。

希望这是有道理的,并希望得到任何反馈!

干杯

5 个答案:

答案 0 :(得分:0)

这个怎么样

if($active && $paid)
{
    return $amount;
}elseif($active && !$paid ) {//OR empty($paid)
    'You have not paid';
}else {
    echo 'You are not active';
}

答案 1 :(得分:0)

在你的两个选项中,我更喜欢阅读第二个选项,但它有点主观,并且有很多风格和文档。

当我有多个验证时,我的偏好是构造一个数组来保存错误消息并根据需要填充它。我使用相同的数组来检查是否有任何错误,并使返回和/或输出以找到的内容为条件,例如。

$errors = array();
if(!$active) $errors[] = 'You are not active';
if(!$paid) $errors[] = 'You have not paid';

foreach($errors as $error) {
  echo $error;
}

return empty($errors) ? FALSE : $amount;

此策略相对于您的任何一个选项的一个优势是,我们可以查看所有错误,而不是一次看到一个错误(如果您已经填写了长网页表单,实现了您的电话号码失踪,修复,重新提交,然后意识到另一个字段错了并修复它等等然后你知道这种感觉)。但是,如果故意在任何给定错误后停止处理,则需要die()exit()

答案 2 :(得分:0)

看来,您正试图从函数中获取此输出。在函数中使用echo和exit不是一个好习惯。另外,我看到,你正在使用echo并在函数中返回(混合),这不是很好的标准编码风格。以下是在PHP函数中执行此操作的简单且最佳方法。

if (firebase.database().ref(`/bavuruistek/${userid}`).child(katilan) === null ) {
  firebase.database().ref(`/bavuruistek/${userid}`)
    .push({
      katilan, istek })
    .then(() => {
      dispatch({ type: STUDENT_REQUEST_SUCCESS });
      Actions.pop();
    });
}
if (firebase.database().ref(`/bavuruistek/${userid}`).child(katilan) !== null) {
  console.log(firebase.database().ref(`/bavuruistek/${userid}/${katilan}`));
  Alert.alert(
    'Mesaj',
    'Daha önce başvurunuz yapılmış!',
    [
      { text: 'Tamam', onPress: () => null }
    ]
  );
}

答案 3 :(得分:0)

为了您的目的,大约有5件事需要是真实的以显示某件事。那么你可以使用。

if($thinks != 5)
{
  then condition return false;
}
else
{
  certain thing return true and other condition will be execute;
}

答案 4 :(得分:0)

我认为你可以这样做。

说明:函数将检查它是否处于活动状态然后它将返回字符串错误,然后它将检查它是否未付款然后返回字符串错误,如果它已付款且处于活动状态,那么它将返回amount

代码:

function get_amount($paid, $active) {
    if(!$active) {
        return "You are not active";    
    }
    if(!$paid) {
        return "You have not paid";
    }
    return $amount;
}