0

データベースにアクセスするには、シングルトンオブジェクトを作成し、db::db->query($sql); Kind of nice!のようにアクセスします。

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プロパティを設定することを除いて、機能しているようです。

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
4

1 に答える 1

2

ポイントがわからない?

データベース接続とは異なり、メールクラスには永続的な接続がないため、パフォーマンスが向上することはありません。これにシングルトンを使用することの欠点だけがわかります。特に、最後にメッセージを送信したときに発生した可能性のある偶発的な変更を回避するために、クラスのすべてのプロパティをリセットする必要があります。

PHPMailerは、使用するように設計された方法で使用します。

于 2013-02-23T16:55:18.460 に答える