如何简化此代码? (如果其他声明太多)

时间:2011-08-02 04:33:44

标签: php logic

这是一个简单的用户输入信息代码,第一个if条件是 this-> sanitize,检查数据是否有效,另一个是 this-> haveDuplicateUser_nameAndEmail(),用于检查用户名和电子邮件是否存在于db中。 第三个是 this-> addNewUser(),它将用户记录添加到数据库。

    if(!$this->sanitize()){
        $this->printError();   //the data is not sanitize
        return;
    }else{       
        if($this->haveDuplicateUser_nameAndEmail()){ //duplicateUserNameAndPassword, cannot add new user
            $this->printError();
        }else{
            if($this->addNewUser()){ 
                $this->printSuccess(); //add user success
            }else{
                $this->printError(); //add user fail
            }
        }
    }        

5 个答案:

答案 0 :(得分:3)

伪代码:

  if not this->sanitize() or
     this->haveDuplicateUser_nameAndEmail() or
     not this->addNewUser() then
     this.printError()
  else then
     this.printSuccess()

注意:如果不满足先前条件,则假定短路行为或不会出现史诗失败的功能。

答案 1 :(得分:1)

假设第一次“返回”是无关的,那么:

if ((!$this->sanitize()) 
     || ($this->haveDuplicateUser_nameAndEmail())
     || (!$this->addNewUser()) {
   $this->printError();   //the data is not sanitize
}
else
  $this->printSuccess(); //add user success

或许您想要回复任何错误?如果是这样,只需添加“return”。

但是你的第一个片段并没有什么“错误”。如果它正确涵盖了所有条件 - 那就去吧:)

答案 2 :(得分:1)

您可以使用例外来简化您提交给我们的阻止。您将不得不更新相应方法的代码,以根据自己的内部布尔逻辑抛出这些异常。没有非if解决方案可以说“这个POST是否等于空字符串?”在php。

如果你这样做,你就会进入使用例外goto s的领域,这通常是不受欢迎的。我想你可以辩论它。

try {
   $this->sanitize();
   $this->haveDuplicateUser_nameAndEmail();
   $this->addNewUser();
   $this->printSuccess();
}
catch (SanitizeOrDuplicateException $sode) {
   $this->printError();
}

答案 3 :(得分:0)

整件事情相当于:

    if(!$this->sanitize()){
        $this->printError();   //the data is not sanitize
        return;
    } else if($this->haveDuplicateUser_nameAndEmail()){       
        $this->printError();
    } else if($this->addNewUser()) {
        $this->printSuccess(); //add user success
    } else {
         $this->printError(); //add user fail
    }

我认为这是javascript并支持其他ifs。

答案 4 :(得分:0)

$is_valid = $this->sanitize() && !$this->haveDuplicateUser_nameAndEmail();
if($is_valid && $this->addNewUser()){
    $this->printSuccess();
}else{
    $this->printError();
}

你也可以在没有$is_valid变量的情况下完成它,但我认为如果你需要回来并在以后维护它,它有助于代码的可读性。