Arian Faurtosh Arian Faurtosh - 4 months ago 7x
PHP Question

How to not call a function statically in php?

I am using pear to send mail in PHP. I've followed the example that is on here ( However, I am getting this error message.

Strict Standards: Non-static method Mail::factory() should not be called statically in C:\xampp\htdocs\functions.php on line 43

So I've been trying to get this Strict Standards message to not show up.

This is my code:

$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

I've read many Stack Overflow Q&A that say just add a
to the beginning of
. And it is true, it makes the error disappear, but I feel like that just hides the error, and doesn't actually solve the problem.

@$mail =& Mail::factory("smtp", $smtpinfo);

How do I not call the method above as statically?

Even the documentation on this page (, says
This function cannot be called statically.
... but the example they gave is the same way I am calling the method?!

Please don't answer just add
in front to remove the strict standard or
... that is not a solution!


If you take a look at the PEAR Mail class, you can see that there are a few instances of it calling methods statically when the methods are not declared as static.

Change line 74 of Mail.php from:

function &factory($driver, $params = array())


static function &factory($driver, $params = array())

The other less desirable alternative would be to modify your php.ini configuration to disregard the E_STRICT warnings, but I believe fixing the cause of the error message is better than hiding it.