在一个不相关的,普通的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');
我得到: 语法错误,意外“使用”(T_USE)
任何移动使用的尝试最终都无法正常工作,所以我忽略了它们并尝试让它在没有命名空间的情况下工作。
require_once(APP . 'Vendor' . DS.'autoload.php');
require_once(APP . 'Vendor' . DS.'phpmailer\phpmailer\src\PHPMailer.php');
我知道它通过require_once加载PHP文件,该文件包含PHPMailer类。我收到这个错误:
Error: Class 'PHPMailer' not found
但是我知道那个班级必须出现在某个地方,因为我装了它。代码如下所示,称之为:
$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上的所有其他问题似乎对我没有帮助。
答案 0 :(得分:1)
你将use
陈述放在错误的地方;它们需要放在文件的顶部(在任何namespace
声明之后),因为它们不是块范围的。 Read the PHP docs
您可以混合使用命名空间和非命名空间的代码,您只需要知道它正在进行中。