Page 1 sur 1

Fatal error: Call to undefined method Membres::mailactivatio

Posté : 10 oct. 2011, 19:46
par zzzzzz
Bonjour,

Je débute en POO. J'ai un problème avec mon code j'ai :

Fatal error: Call to undefined method Membres::sendmail() in /home/site/public_html/site/class/Mail.php on line 36
Mon code est le suivant :

Code : Tout sélectionner

<?php class Mail { public function sendmail($FromE,$FromN,$To,$Sujet,$Mes) { //message en mode texte (affiché uniquement si l'affichage en HTML n'est pas possible) $msg_texte = preg_replace("/\<a href=\"http\:\/\/(.*?)\>(.*?)\<\/a\>/","\\2",$Mes); $msg_texte = preg_replace("/\<br\>/","\\n",$msg_texte); //message au format HTML $msg_html = $Mes; //on va se servir de la chaîne limite pour délimiter les différentes zones du message $limite = "-----=" . md5( uniqid ( rand() ) ); $headers = "From: \"".$FromN."\"<".$FromE.">\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: multipart/alternative; boundary=\"$limite\""; $message = "This is a multi-part message in MIME format.\n\n"; $message .= "--" . $limite . "\n"; $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; $message .= "Content-Transfer-Encoding: 8bit\n\n"; $message .= $msg_texte; $message .= "\n\n"; $message .= "--" . $limite . "\n"; $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n"; $message .= "Content-Transfer-Encoding: 8bit\n\n"; $message .= $msg_html; $message .= "\n\n"; $message .= "--" . $limite . "--\n"; mail($To, $Sujet, $message, $headers); echo 'To :'.$To.'<br/>'; echo 'Sujet :'.$Sujet.'<br/>'; echo 'message :'.$messsage.'<br/>'; echo 'Headers :'.$headers.'<br/>'; } public function mailactivation($cle,$To) { $this->sendmail('[email protected]','site.com',$To,'site.com : Activation de votre compte',"Bienvenue,<br/><br/>Vous venez de rejoindre la grande famille site <a href=\"http://www.site.com\">www.site.com</a>.<br/><br/>Pour activier votre compte cliquez sur le lien suivant : http://www.site.com/register.php?varcle=$cle<br /><br />"); } } ?>
Pourquoi cette erreur alors que j'utilise bien $this-> ? A noter que si je créé un objet mail et que je fais $mail->sendmail(); Cela marche.

A noter que j'appelle la fonction sendmail depuis une autre classe comme ceci :

Code : Tout sélectionner

Mail::mailactivation($emailcode, $emailbak);
Merci d'avance pour votre aide pour un problème qui me bloque depuis un moment. :cry:

Re: Fatal error: Call to undefined method Membres::mailactiv

Posté : 10 oct. 2011, 21:03
par xTG
Ton appel est un appel statique, tu n'instancie donc aucun objet...
Donc il est normal de ne pas trouver l'existence de $this.
Instancie ton objet et appelles la fonction sur l'instance, cela ira bien mieux. ;)

Re: Fatal error: Call to undefined method Membres::mailactiv

Posté : 10 oct. 2011, 21:24
par KevinG
Le probleme n'a rien a avoir avec une instanciation de l'objet ou non, puisqu'il est dans la creation de sa classe.

Que dis-tu saugrenu ?

Re: Fatal error: Call to undefined method Membres::mailactiv

Posté : 10 oct. 2011, 21:37
par moogli
Le probleme n'a rien a avoir avec une instanciation de l'objet ou non, puisqu'il est dans la creation de sa classe.

Que dis-tu saugrenu ?
je pense que tu n'a pas bien vu ceci
<?php
public function mailactivation($cle,$To) {
$this->sendmail('[email protected]','site.com',$To,'site.com : Activation de votre compte',"Bienvenue,<br/><br/>Vous venez de rejoindre la grande famille site <a href=\"http://www.site.com\">www.site.com</a>.<br/><br/>Pour activier votre compte cliquez sur le lien suivant : http://www.site.com/register.php?varcle=$cle

");
?>
Comme l'indique xTG l'utilisation du $this ne peux pas se faire si la classe n'est pas instanciée.

Hors lorsqu'il fait Mail::mailactivation($emailcode, $emailbak); il s'agit d'une utilisation statique de la classe pas d'instance pas de $this qui est une référence sur l'objet hors pas d'objet pas de référence :mrgreen:

donc oui xTG à raison.

d'ailleurs vu qu'il s'agit d'une classe php5, si l'error reporting est à E_ALL|E_STRICT (ou simplement E_STRICT) il y aurait une belle erreur comme quoi il est fait appel statiquement à une méthode qui ne l'est pas (pas d'utilisation du mot clef static !)


@+

Re: Fatal error: Call to undefined method Membres::mailactiv

Posté : 10 oct. 2011, 21:44
par zzzzzz
Salutation, merci pour vos réponses. Effectivement on devrait pouvoir appeler la methode au sein de la même classe. On m'a dit d'utiliser : self::sendmail()... A priori ca marche... De là à comprendre quand utiliser $this et quand utiliser self:: aucune idée. :shock:

Re: Fatal error: Call to undefined method Membres::mailactiv

Posté : 11 oct. 2011, 06:59
par soycd
De là à comprendre quand utiliser $this et quand utiliser self:: aucune idée. :shock:
http://fr.php.net/manual/fr/language.oop5.basic.php