2011-08-02 9 views
1

ここでは、最初の条件が this-> sanitizeで、データが有効かどうかを確認するための単純なコードです。別のものは this-> haveDuplicateUser_nameAndEmail()です。ユーザー名と電子メールがdbに存在するかどうかを確認するために使用されます。 3番目のデータは this-> addNewUser()で、ユーザーレコードがdbに追加されます。このコードを単純化するには? (あまりにも多くのelse 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 
      } 
     } 
    }   

答えて

1

あなたが私たちに提示したブロックを単純化するために例外を使用することができます。独自の内部ブール論理に基づいてこれらの例外をスローするように、それぞれのメソッドのコードを更新する必要があります。 「このPOSTは空の文字列ですか?」というような言い方はありません。if PHPで。

これを行うと、例外を使用する領域が、gotoとして一般的に悩まされています。私はあなたがどちらにでもそれを議論できると思う。私はそれ、これはJavaScriptをされ、それ以外のIFSをサポート取る

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 
    } 

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

私は例外的なやり方が好きです。すばらしいです! – Tattat

3

擬似コード:

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

注:これは短絡の動作や、以前の条件が満たされない場合に失敗叙事詩に行くされていない機能を前提としています。

1

はその後、最初の「復帰」は余分なだったと仮定すると:

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

それとも、あなたが何らかのエラーに返すようにしたいの?その場合は、単に「return」を追加してください。

しかし、あなたの最初のスニペットでは本当に「間違っている」ことはありません。それがすべての条件を正しくカバーしている場合 - それを行ってください:)

+0

+1。良い答え...本質的に私と同じですが、実際にはPHPの構文です。ハ! – Patrick87

0

全体のことは同等です。

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

また$is_valid変数せずにそれをやって逃げることができ、私はあなたが戻ってきて、後でそれを維持する必要がある場合には、コードの可読性に役立つと思います。

関連する問題