首页 > 解决方案 > PHPMailer 在 null 上调用成员函数 isSMTP()

问题描述

我正在尝试更新我的 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 类方法并显示isSMTP,但是当我稍后调用它时,它会返回错误。

      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();

标签: phpwordpressphpmailer

解决方案


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

很可能这段代码运行了两次——第一次$oPhpMailer设置是因为类不存在(这就是你得到get_class_methods输出的原因)。该类第二次存在,因此该变量为空。

尝试添加其他

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

推荐阅读