如果一个类函数返回false,如何停止所有类函数

时间:2014-02-17 18:24:41

标签: php sendmail

我正在创建一个邮件类。如果一个函数返回false,我想停止所有函数,

打电话给班级

<?php
  $mail= new mail();
  $mail->from('abc@gmail.com');
  $mail->to('jhon@gmail.com');
  $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(){

    }
  }
?>

4 个答案:

答案 0 :(得分:3)

考虑使用Exceptions

将代码包裹在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("to@example.com");
    $mail->send();
}
catch(Exception $e)
{
    echo "Email not sent: " . $e->getMessage()."\n";
}

这样,一旦from()发现了一个无效的地址,它就会抛出异常,执行将在那时停止并在catch块内继续

答案 1 :(得分:0)

将all组合成一个发送功能

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('abc@gmail.com','jhon@gmail.com')){echo 'mail send';}else{echo 'not   send';}
?>

答案 2 :(得分:0)

解决此问题的一种方法是链接方法调用。为此,除了最后一个send()之外,类中的每个方法都应返回实例本身。之前的每个方法仅用于设置数据,然后send()方法将触发验证。

所以你的电话看起来像......

$mail = new Mail();
$mail->to('abc@gmail.com')
     ->from('xyz@gmail.com')
     ->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
   }
}

因为它被整齐地打包为一个单独的调用链,所以你可以在链中返回错误或者像其他人所建议的那样抛出异常。

答案 3 :(得分: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;
    }
  }
}

这不是最佳方式,但这种方式与您的版本最相似