PHP - 在自定义 Class 中使用 PHPMailer

PHP - Use PHPMailer in Custom Class

我正在尝试在 class 中使用 PHPMail,但在下面指示的行中出现错误。

有人能看出原因吗?

    class SendMail {

    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;

    public function __construct()
    {
        $this->debug();
        $this->includes();
    }

    public function send_mail()
    {
        $mail = new PHPMailer(true); // ERROR
    }

    private function includes()
    {
        require __DIR__ . '/../config.php';
        require '/var/composer/phpmailer/vendor/autoload.php';
    }

    private function debug()
    {
        ini_set('display_errors', 0); // 0 = Only Warnings, 1 = All Notifications
        ini_set('display_startup_errors', 1);
        error_reporting(E_ALL);
    }
    }

我试过将“新”声明移到构造函数中,但这没有任何区别。

我收到 500 错误并且 VSCode 调试器显示:

您滥用了 Traits .

我认为PHPMailer不是特质。

您需要将其用作命名空间而不是特征。

<?php
namespace \XYZ;

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class SendMail {
    // ....
}

请注意,您需要使用自动加载器。

最终工作代码:

<?php

use PHPMailer\PHPMailer\PHPMailer;

class SendMail
{
    public function __construct()
    {
        $this->debug();
        $this->includes();
    }

    public function send_mail()
    {
        $mail = new PHPMailer(true);
        echo 'Hello World';
    }

    private function includes()
    {
        require __DIR__ . '/../config.php';
        require '/var/composer/phpmailer/vendor/autoload.php';
    }

    private function debug()
    {
        ini_set('display_errors', 0); // 0 = Only Warnings, 1 = All Notifications
        ini_set('display_startup_errors', 1);
        error_reporting(E_ALL);
    }
}