无法在 CakePHP 2 上加载 PHPMailer 5.5

Cannot load PHPMailer 5.5 on CakePHP 2

在一个不相关的普通 PHP 项目中,我只有这个:

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

require 'vendor/autoload.php';

吸进去就好了。按照 CakePHP 2.10 的标准,我将所有关联的(作曲家的)文件放在 app/Vendor 文件夹中,并在我的控制器中尝试这样做:

public function index($load = null) {
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    include(APP . 'Vendor' . DS.'autoload.php');

我得到: 语法错误,意外 'use' (T_USE)

任何移动 use 的尝试最终都无法正常工作,所以我忽略它们并尝试让它在没有名称空间的情况下工作。

require_once(APP . 'Vendor' . DS.'autoload.php');
require_once(APP . 'Vendor' . DS.'phpmailer\phpmailer\src\PHPMailer.php');

我知道它正在通过 require_once 加载 PHP 文件,该文件包含 PHPMailer class。我收到此错误:

Error: Class 'PHPMailer' not found  

但我知道 class 必须存在于某处,因为我加载了它。代码看起来像这样,调用它:

$mail = new PHPMailer(true);
            try {
                //Server settings
                $mail->SMTPDebug = 3;                                 // Enable verbose debug output
                $mail->isSMTP();                                      // Set mailer to use SMTP
                $mail->Host = 'smtp.zoho.com';  // Specify main and backup SMTP servers

等所以我不确定这个版本的 PHPMailer 是否拒绝在没有命名空间的情况下工作,而 CakePHP 2 不支持? Google 上的所有其他问题似乎对我没有帮助。

您将 use 语句放在了错误的位置;它们需要放在文件的顶部(在任何 namespace 声明之后),因为它们不是块范围的。 Read the PHP docs.

您可以混合使用命名空间和非命名空间代码,您只需要知道它在进行。