Ari*_*osh 5 php email methods pear
我正在使用pear以PHP发送邮件.我按照这里的例子(http://pear.php.net/manual/en/package.mail.mail.send.php).但是,我收到此错误消息.
严格标准:不应在第43行的C:\ xampp\htdocs\functions.php中静态调用非静态方法Mail :: factory()
所以我一直试图让这个严格的标准信息不显示.
这是我的代码:
$smtpinfo["host"] = "********";
$smtpinfo["port"] = "587";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = $mail_username;
$smtpinfo["password"] = $mail_password;
## This line below is causing the problem ##
$mail =& Mail::factory("smtp", $smtpinfo); // <-- Line 43
Run Code Online (Sandbox Code Playgroud)
我已经阅读了许多Stack Overflow Q&A,它们只是@在开头添加一个$mail.确实如此,它使错误消失,但我觉得这只是隐藏错误,并没有真正解决问题.
@$mail =& Mail::factory("smtp", $smtpinfo);
Run Code Online (Sandbox Code Playgroud)
我怎么不静态调用上面的方法?
甚至本页面上的文档(http://pear.php.net/manual/en/package.mail.mail.send.php)也说This function cannot be called statically.......但是他们提供的示例与我调用方法的方式相同?!
请不要回答只是添加@在前面删除严格的标准或E_ALL & ~E_STRICT...这不是一个解决方案!
如果你看一下PEAR Mail类,你可以看到有一些实例在没有将方法声明为静态时静态调用方法.
改变第74行Mail.php:
function &factory($driver, $params = array())
Run Code Online (Sandbox Code Playgroud)
至:
static function &factory($driver, $params = array())
Run Code Online (Sandbox Code Playgroud)
另一个不太理想的选择是修改你的php.ini配置以忽略E_STRICT警告,但我相信修复错误消息的原因比隐藏它更好.