2016-08-14 6 views
1

Ich habe eine benutzerdefinierte Klasse, die PHPMailer erweitert, und ich möchte die Sendefunktion überschreiben. Dies scheint zu funktionieren, aber ich habe Probleme, meinen Kopf herumzulegen, wenn parent::send() am aktiven Objekt arbeitet oder einfach nur zufällig was sendet. Im Grunde, wie weiß parent::send(), welches spezifische Objekt wir handeln?überschreiben PHPMailer senden Methode

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

ich instanziiert wie so:

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

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

Antwort

2

Als Ryan sagte, wird es auf jeden Fall arbeiten, aber Sie es einfach testen können. Sie müssen die Überprüfung in der Sendefunktion nicht wiederholen, sondern nur die Funktion zurückgeben, die die Elternfunktion zurückgibt. Es ist auch eine gute Idee, den übergeordneten Konstruktor aufzurufen, damit Sie nicht übersehen, was er tut, wenn Sie ihn überschreiben, und Sie sollten immer sicherstellen, dass die überschriebenen Methodensignaturen übereinstimmen. Vermeiden Sie auch SSL auf 465; es ist seit 1998 veraltet:

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

Gotchya ... Ich glaube, ich brauchte nur eine Überprüfung der Gesundheit. Vielen Dank! – kylex