这是一个简单的用户输入信息代码,第一个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
}
}
}
答案 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
变量的情况下完成它,但我认为如果你需要回来并在以后维护它,它有助于代码的可读性。