我有一个扩展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}}
答案 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();
}
}