2011-08-02 2 views
1

Voici un code simple pour les informations d'entrée utilisateur, la première condition est ce-> assainir, pour vérifier les données est valide ou non, un autre est this-> haveDuplicateUser_nameAndEmail(), qui est utilisé pour vérifier le nom d'utilisateur et le courrier électronique existe dans la base de données ou non. le troisième est this-> addNewUser(), qui ajoute l'enregistrement utilisateur à la base de données.Comment simplifier ce code? (trop sinon statment)

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

Répondre

1

Vous pouvez utiliser des exceptions pour simplifier le bloc que vous nous avez présenté. Vous devrez mettre à jour le code des méthodes respectives pour lancer ces exceptions en fonction de leur propre logique booléenne interne. Il n'y a pas de solution non-if pour dire quelque chose comme "Est-ce que ce POST est égal à une chaîne vide?" en php. Si vous faites cela, vous êtes dans le domaine de l'utilisation des exceptions goto s, ce qui est généralement mal vu. Je pense que vous pouvez en débattre de toute façon.

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

J'aime l'exception façon de le faire. Génial! – Tattat

3

pseudocode:

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

Note: Ceci suppose un comportement court-circuit ou des fonctions qui ne vont pas épique échouer si les conditions précédentes ne sont pas remplies.

1

En supposant que le premier « retour » était étrangère, alors:

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

Ou peut-être vous voulez revenir en cas d'erreur? Si oui, ajoutez simplement "return".

Mais il n'y a rien de vraiment "faux" avec votre premier extrait. Si elle couvre toutes les conditions correctement - alors allez-y :)

+0

+1. Bonne réponse ... essentiellement la même que la mienne, mais en fait dans la syntaxe PHP. Hah! – Patrick87

0

Le tout est équivalent à:

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 
    } 

Je suppose que cela est le javascript et soutient d'autre ifs.

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

Vous pouvez aussi vous en sortir avec le faire sans la variable $is_valid, mais je pense que cela aide à la lisibilité du code si vous avez besoin de revenir et de le maintenir plus tard.