致命错误:在 C:\wamp\www\Scaffolding\PHPMailer-master\src\PHPMailer.php 第 1943 行中找不到类 '



我一直在尝试设置一个smtp mailer,这样一旦用户在我的网站上填写表单,它就会自动通过电子邮件向我发送消息。我将PHPmailer的所有文件都放在同一目录中,但每当提交表单时,它都会不断给我上述错误。

这是PHPmailer.php的1943行:

throw new Exception($this->lang('authenticate'));

有人知道问题出在哪里吗?

谢谢。

您尚未将类导入到命名空间中。

如果不这样做,它将期望类具有名称空间。事实并非如此。

有两种解决方案。添加一个use语句,或者给出完全限定的类名:

<?php
namespace Random;
use Exception;
class Whatever
{
public function whatever()
{
throw new Exception();
}
}

或者,使用完全限定的类名:

<?php
namespace Random;
class Whatever
{
public function whatever()
{
throw new Exception();
}
}

我更喜欢第一种选择。有些类有很长的完全限定名称,所以说use RidiculouslyLongFullyQualifiedClassName;,然后在代码中引用ClassName更容易。否则你需要说new RidiculouslyLongFullyQualifiedClassName(),这太糟糕了。

第一种方法的另一个优点是,您可以立即看到代码中使用的每个类。

将代码更改为:throw new Exception($this->lang('authenticate'));或添加use Exception;添加到文件顶部。

问题是您正在编辑的文件位于namespace PHPMailerPHPMailer;中,这意味着当您抛出Exception时,它希望类位于同一命名空间中。

出现错误的原因可能是您的类没有被自动加载。

使用符合PSR的自动加载,您不再需要require_once所需的每个类文件。如今,每个人都使用Composer来实现这一点。https://getcomposer.org/

安装后,要在项目中开始使用Composer,您只需要一个composer.json文件。此文件描述了项目的依赖关系,还可能包含其他元数据。

{
"require": {
"phpmailer/phpmailer": "^6.0"
}
}

composer install将PHPMailer安装到供应商文件夹中。

在应用程序的index.php中,只需添加require_once 'vendor/autoload.php;

现在,所有类都将加载,而无需在中要求它们,您的错误应该会消失!

最新更新