将PHPMailer用作单例(与PDO一样)
为了访问我的数据库,我创建了一个单例对象,并像将PHPMailer用作单例(与PDO一样),php,singleton,phpmailer,Php,Singleton,Phpmailer,为了访问我的数据库,我创建了一个单例对象,并像db::db->query($sql)那样访问它有点不错 class db { private static $instance = NULL; private function __construct() {} //Make private private function __clone(){} //Make private public static function db() //Get instanc
db::db->query($sql)那样访问它代码>有点不错
class db {
private static $instance = NULL;
private function __construct() {} //Make private
private function __clone(){} //Make private
public static function db() //Get instance of DB
{
if (!self::$instance)
{
self::$instance = new PDO("mysql:host=xxx;dbname=xxx", 'xxx', 'xxx');
self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$instance;
}
}
我可以也应该对PHPMailer采取同样的方法吗?它似乎与设置bcc属性的例外情况一起工作,这会导致“尝试访问私有属性”错误
不知道重点是什么
与数据库连接不同,mail类中没有持久连接,因此不会提高性能。我只看到了在这方面使用单例的缺点——尤其是您必须重置类的每个属性,以避免上次发送消息时可能发生的意外更改
我只想按照设计的方式使用PHPMailer。谢谢Pekka。我感谢你的直接回应。我计划这样做只是为了保留电子邮件密码,但同意你的立场。你可以用我的名字和电子邮件密码来扩展PHPMailer,比如@user-sure,这听起来很合理!
class email{
public $bcc;
private static $instance = NULL;
private function __construct() {} //Make private
private function __clone(){} //Make private
public static function email() //Get instance of email
{
if (!self::$instance)
{
require_once ('PHPMailer_v5.1/class.phpmailer.php');
self::$instance = new PHPMailer();
self::$instance->IsSMTP();
self::$instance->SMTPAuth = true;
self::$instance->SMTPSecure = "tls"; //Or SSL?
self::$instance->Host = "smtp.gmail.com";
self::$instance->Port = 587; //Maybe 465 instead? SSL only?
self::$instance->Username = "xxx";
self::$instance->Password = "xxx";
}
return self::$instance;
}
}
$mail = email::email();
$mail->AddReplyTo('email@email.com','name');
$mail->SetFrom('email@email.com','name');
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->bcc = 'doesntwork@gmail.com';
$mail->FromName = $users_name;
$mail->Subject = $subject;
$mail->WordWrap = 50; // set word wrap