覆盖PHPMailer发送方法

时间:2016-08-14 06:49:29

标签: php class phpmailer

我有一个扩展PHPMailer的自定义类,我想覆盖send函数。这似乎有效,但如果parent::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?

我实例化如下:

{{1}}

1 个答案:

答案 0 :(得分:2)

正如Ryan所说,无论如何它都会起作用,但你可以很容易地测试它。您不需要在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();
     }
}