Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 (http://pear.php.net/manual/en/package.mail.mail.send.php). 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 $mail. 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 (http://pear.php.net/manual/en/package.mail.mail.send.php), 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 E_ALL & ~E_STRICT ... that is not a solution!

like image 731
Arian Faurtosh Avatar asked Feb 26 '14 18:02

Arian Faurtosh


2 Answers

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

to:

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.

like image 159
Amal Murali Avatar answered Oct 04 '22 03:10

Amal Murali


There is nothing wrong in your code and example in pear documentation page. That is non-fatal message that PHP gives. The main reason of that message is, pear Mail has not been updated for the keyword static. PHP has been introduced static keyword usage in 2006 or 2007, couldn't remember the exact date. PHP gives error about the static calling because of pear Mail 's old code base.

like image 24
Hüseyin BABAL Avatar answered Oct 04 '22 02:10

Hüseyin BABAL