Intereting Posts
php array_merge без стирания значений? Как проверить, установлен ли Suhosin? Echo in for loop Symfony2: вызов form_widget в исключении twig throws «Catchable fatal error … должен быть экземпляром Symfony \ Component \ Form \ FormView» AngularJS – перенаправление страницы на другую страницу в угловых js при попытке получить параметр из url На любых языках Могу ли я захватить веб-страницу и сохранить ее файл изображения? (нет установки, нет activeX) Как найти значение min float в нескольких массивах, если один из элементов quil zero Добавление вертикального текста с помощью fpdf / fpdi в php Найти символ до или после строки, используя preg_grep () в PHP При настройке переменных среды в директивах Apache RewriteRule, что заставляет имя переменной иметь префикс «REDIRECT_»? AJAX PHP функция onchange select box Преобразование кода с анонимными функциями в PHP 5.2 Как выбрать уникальное значение из столбца на основе нескольких идентификаторов во многих случаях? WAMP / XAMPP реагирует очень медленно по локальному хосту PHP Unset Session Variable

Как не вызывать функцию статически в php?

Я использую грушу для отправки почты в PHP. Я следовал примеру, который находится здесь ( http://pear.php.net/manual/en/package.mail.mail.send.php ). Тем не менее, я получаю это сообщение об ошибке.

Строгие стандарты: нестатический метод Mail :: factory () не следует вызывать статически в C: \ xampp \ htdocs \ functions.php в строке 43

Поэтому я пытался получить сообщение «Строгие стандарты», чтобы не появляться.

Это мой код:

$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 

Я прочитал много вопросов и ответов о переполнении стека, которые говорят, что просто добавьте @ в начало $mail . И это правда, это заставляет ошибку исчезать, но я чувствую, что это просто скрывает ошибку и на самом деле не решает проблему.

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

Как не вызывать метод выше, как статически?

Даже документация на этой странице ( http://pear.php.net/manual/en/package.mail.mail.send.php ) говорит, что This function cannot be called statically. … но пример, который они дали, так же, как я называю метод ?!

Пожалуйста, не отвечайте, просто добавьте @ впереди, чтобы удалить строгий стандарт или E_ALL & ~E_STRICT … это не решение!

Solutions Collecting From Web of "Как не вызывать функцию статически в php?"

Если вы посмотрите на класс PEAR Mail, вы увидите, что существует несколько случаев, когда он вызывает методы статически, когда методы не объявлены как статические.

Измените строку 74 Mail.php с:

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

чтобы:

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

Другой менее желательной альтернативой было бы изменение конфигурации php.ini чтобы игнорировать предупреждения E_STRICT , но я считаю, что исправление причины сообщения об ошибке лучше, чем скрытие.

В вашем коде и примере на странице документации груши нет ничего плохого. Это non-fatal message которое дает PHP. Основная причина этого сообщения: pear Mail не обновляется для ключевого слова static . PHP вводил static использование ключевых слов в 2006 или 2007 году, не мог вспомнить точную дату. PHP дает ошибку о статическом вызове из-за старой базы кода груши Mail .

без необходимости изменять исходные классы, просто создайте собственный класс с помощью метода:

 class Mailer { function sendConfirmationEmail() { $ret = false; $smtp = new Mail(); $smtp->factory('smtp', $emailServer); $mail = $smtp->send($recipient, $headers, $body); if (@PEAR::isError($mail)) { sprintf("in sendConfirmationEmail error: %s", $mail->getMessage()); } else { sprintf("in sendConfirmationEmail E-Mail successfully sent to: %s", $recipient); $ret = true; } return $ret; } 

и назовите его в своем статическом коде:

 $m = new Mailer(); $m->sendConfirmationEmail(); 

Это сработало для меня. Надеюсь, поможет. Pietro.