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



由于PHPMailer的位置在Wordpress 5.5中被移动,我正在尝试更新我的Wordpress插件。

我现在正在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();

看起来if (!class_exists("\PHPMailer"))返回false(表示类存在(。在这种情况下,您没有设置$oPhpMailer,这意味着$oPhpMailer = null。这就是错误的含义:您无法运行null->isSMTP()

这段代码很可能会运行两次——第一次是因为类不存在而设置$oPhpMailer(这就是为什么会得到get_class_methods输出(。类第二次存在时,因此变量为null。

尝试添加其他

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

最新更新