PHPMailer 在 null 上调用成员函数 isSMTP()

PHPMailer Call to a member function isSMTP() on null

我正在尝试更新我的 Wordpress 插件,因为 PHPMailer 的位置在 wordpress 5.5 中移动了。

我现在正在 Wordpress 5.1 版中进行测试,遇到以下错误

Fatal error: Call to a member function isSMTP() on null in (path) on line (line)

如下面的代码所示,我尝试了 var_dumping class 方法,它显示 isSMTP 但是当我稍后调用它时它 returns错误。

      if (!class_exists("\PHPMailer")) {
        global $wp_version;
        if ( version_compare( $wp_version, '5.5', '<' ) ) {
          require_once(\ABSPATH . \WPINC . "/class-phpmailer.php");
          require_once(\ABSPATH . \WPINC . "/class-smtp.php");
          require_once(\ABSPATH . \WPINC . "/class-pop3.php");
          $oPhpMailer = new \PHPMailer();
        }else {
          require_once(\ABSPATH . \WPINC . "/PHPMailer/PHPMailer.php");
          require_once(\ABSPATH . \WPINC . "/PHPMailer/SMTP.php");
          require_once(\ABSPATH . \WPINC . "/class-pop3.php");
          $oPhpMailer = new PHPMailer();
        }
      }

      var_dump(get_class_methods($oPhpMailer));
      $oPhpMailer->isSMTP();

看起来像 if (!class_exists("\PHPMailer")) returns false(这意味着 class 存在)。在这种情况下,您没有设置 $oPhpMailer,这意味着 $oPhpMailer = null。这就是错误的意思:你不能 运行 null->isSMTP().

很可能此代码是 运行 两次 - 第一次设置 $oPhpMailer 因为 class 不存在(这就是为什么你得到 get_class_methods输出)。 class 第二次存在,所以变量为空。

尝试添加一个 else

if (!class_exists("\PHPMailer")) {
  // ...
} else {
  $oPhpMailer = new \PHPMailer();
}