2014-02-17 35 views
0

我正在創建一個郵件類。我想停止所有功能,如果一個函數返回false,使用Exceptions如果一個類的函數返回false,如何停止所有類的功能

調用類

<?php 
    $mail= new mail(); 
    $mail->from('[email protected]'); 
    $mail->to('[email protected]'); 
    $mailsend=$mail->send(); 

    if($mailsend){echo 'mail send';}else{echo 'not send';} 
?> 

<?php 
    class mail{ 
    public function from($email){ 
     /* 
     * email validation 
     * if not valid return false and stop then send and other functions 
     */ 
    } 
    public function to(){ 

    } 
    public function send(){ 

    } 
    } 
?> 
+3

你能否解釋你的問題? –

+1

當從實際返回語句之前返回false時,設置一個標誌(即$ this-> disabled = true)。然後在所有函數中,你需要檢查的第一件事是:if($ this-> disabled){return false; } – Tularis

回答

3

考慮。

將代碼包裝在try..catch區塊中,並在發現問題時拋出Exception

像這樣:

class mail { 
    public function from($addr) { 
     if(not valid addr) throw new Exception("Invalid from address"); 
    } 
    ... 
} 

try 
{ 
    $mail = new mail(); 
    $mail->from("invalid email address"); 
    $mail->to("[email protected]"); 
    $mail->send(); 
} 
catch(Exception $e) 
{ 
    echo "Email not sent: " . $e->getMessage()."\n"; 
} 

這樣,一旦from()發現了一個無效的地址,它會拋出一個異常,並執行將在該點停止和恢復內catch

0

結合所有成發送功能

class mail{ 
    public function send($to,$from){ 
    //do the mailing 
    if(!emailIsValid()) 
     return false; 
    //and so on 
    //if all is fine ..validation etc 
    return true; 

    } 
} 

然後調用它像這樣

<?php 
    $mail= new mail(); 
    if($mail->send('[email protected]','[email protected]')){echo 'mail send';}else{echo 'not send';} 
?> 
0

解決此問題的一種方法是鏈接您的方法調用。爲此,除了最後一個send()之外,你的類中的每個方法都應該返回實例本身。之前的每種方法都只是用於設置數據,然後方法將觸發驗證。

所以,您的通話將看起來像......

$mail = new Mail(); 
$mail->to('[email protected]') 
    ->from('[email protected]') 
    ->send(); 

而且你的類可能看起來像:

class Mail { 

    protected $to = null; 
    protected $from = null; 

    public function to($email) 
    { 
     // You should filter here 
     $this->to = $email; 

     return $this; 
    } 

    public function from($email) 
    { 
     // You should filter here 
     $this->from = $email; 

     return $this; 
    } 

    public function send() 
    { 
     // Validate 
     if ($this->validate()) 
     { 
     // Sending logic 
     } 
     else 
     { 
     // Return or show error 
     } 
    } 

    public function validate() 
    { 
     // Verify email values are valid 
    } 
} 

因爲它是所有整齊地打包成一個單一的調用鏈,可以退貨像其他人所建議的那樣,鏈條出錯或拋出異常。

0

作出(私有)變量valid在你的類:

class mail{ 
    private $valid; 
    public function from($email){ 
    //validation 
    $valid = false||true; //the return value 
    } 
    public function to(){ 

    } 
    public function send(){ 
    if ($valid) { 
     //send mail 
     return true 
    } else { 
     return false; 
    } 
    } 
} 

這不是做的最好的方式,但這種方式是最相似的版本

相關問題