2016-08-14 13 views
1

PHPMailerを拡張するカスタムクラスがあり、send関数をオーバーライドしたいと思います。これは動作しているようですが、parent::send()がアクティブなオブジェクトで作業している場合や、ランダムに送信している場合は、私の頭をラップするのに問題があります。基本的にparent::send()は、私たちがどのような特定のオブジェクトを操作しているかを知っていますか?PHPMailerをオーバーライドするsendメソッド

class Mailer extends PHPMailer 
{ 

    public function __construct() 
    { 
     $this->isSMTP();      
     $this->Host = 'smtp.gmail.com';  
     $this->SMTPAuth = true;    
     $this->Username = '';     
     $this->Password = '';     
     $this->SMTPSecure = 'ssl';    
     $this->Port = 465; 
    } 

    /** 
    * Overrides parent send() 
    * 
    * @return boolean 
    */ 
    public function send() { 
     if (!parent::send()) { 
      // do some stuff here 
      return false; 
     } else { 
      return true; 
     } 
    } 
} 

私はそうのようにインスタンス化:ライアンはそれはとにかく働くことになり、言ったが、あなたは簡単にそれをテストすることができたよう

$mail = new Mailer(); 
// create mailer stuff here 

$mail->send(); // <- How do I know this is acting on the $mail instance? 

答えて

2

。 send関数でチェックを繰り返す必要はなく、親関数が返すものを返すだけです。また、親コンストラクタを呼び出すと、オーバーライド時の動作を忘れずにオーバーライドされたメソッドシグネチャが常に一致するようにすることをお勧めします。また、465ではSSLを避けてください。それは1998年以来時代遅れです:

class Mailer extends PHPMailer 
{ 

    public function __construct($exceptions = null) 
    { 
     parent::__construct($exceptions); 
     $this->isSMTP();      
     $this->Host = 'smtp.gmail.com';  
     $this->SMTPAuth = true;    
     $this->Username = '';     
     $this->Password = '';     
     $this->SMTPSecure = 'tls';    
     $this->Port = 587; 
    } 

    /** 
    * Overrides parent send() 
    * 
    * @return boolean 
    */ 
    public function send() { 
     echo 'Hello from my subclass'; 
     return parent::send(); 
    } 
} 
+0

私はちょうどサニティチェックが必要だと思います。ありがとう! – kylex

関連する問題