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

时间:2018-07-18 14:28:43

标签: php html

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

这是PHPmailer.php的1943行:

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

有人知道是什么问题吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

您尚未将类导入您的名称空间。

如果您不这样做,它将期望该类具有名称空间。不是。

有两种解决方案。添加一个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 Ridiculously\Long\Fully\Qualified\ClassName;然后仅引用ClassName更容易。否则,您需要说出new \Ridiculously\Long\Fully\Qualified\ClassName(),这很糟糕。

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

答案 1 :(得分:0)

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

问题是您正在编辑的文件位于namespace PHPMailer\PHPMailer;中,这意味着当您引发Exception时,它期望该类位于同一名称空间中。

答案 2 :(得分:0)

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

借助符合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;

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