将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