如何在php中静态调用函数?

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...这不是一个解决方案!

Ama*_*ali 5

如果你看一下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警告,但我相信修复错误消息的原因比隐藏它更好.