Appeler une methode de la classe appelante dans une methode d'une classe appelée

Fermé
roland_d_alsace Messages postés 2 Date d'inscription jeudi 26 novembre 2020 Statut Membre Dernière intervention 26 novembre 2020 - 26 nov. 2020 à 16:44
roland_d_alsace Messages postés 2 Date d'inscription jeudi 26 novembre 2020 Statut Membre Dernière intervention 26 novembre 2020 - 26 nov. 2020 à 21:08
Bonjour,

Je souhaite que la méthode $clMail->AjouteUsetListe puisse appeler la méthode InfosListesClub() défini dans la classe appelante Gmodel, et dont le nom est passé en paramètres.


class Gmodel
{
....
public function genereListeMailClubs(){
....
$clMail = new GmailingListsClass();
$clMail->AjouteUserListe($params, 'InfosListesClub');
...
}
public function InfosListesClub(){
....}
}


Merci d'avance pour vos retours d'idées.

2 réponses

jordane45 Messages postés 38457 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 mars 2025 4 740
26 nov. 2020 à 16:54
Bonjour,
Déjà, Pense à préciser le langage dans les balises de code lorsque tu postes du code sur le forum
Explications ( à lire ENTIEREMENT !! ) disponibles ici
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite, quel est le souci ?
As tu un message d'erreur ? ( d'ailleurs, as tu activé l'affichage des erreurs php sur ton site ? )

Qu'as tu essayé ?

Pourquoi le fais tu comme ça ?

Ne peux tu pas envoyer directement les infos voulues en paramètres plutôt que de mettre le nom d'une méthode ?

Sachant que tu peux très bien faire un truc du genre
 $object->$function_name(); // $function_name ici contiendra 'InfosListesClub'

bien entendu, il aura fallu instancier ta class ( ici $object) pour pouvoir y accéder...


0
roland_d_alsace Messages postés 2 Date d'inscription jeudi 26 novembre 2020 Statut Membre Dernière intervention 26 novembre 2020
Modifié le 26 nov. 2020 à 21:13
Merci pour ta réponse et tes informations.

Le soucis est que je ne sais pas accéder à une méthode de le classe appelante dans la classe appelés (comment retrouver l'instance de classe appelante ?).

Pour l'instant je place mes méthodes (InfosListesClub) dans la classe appelée, mais ce n'est pas la solution, car c'est une classe générique en librairy et ces méthodes non rien à faire ici, c'est même un traitement facultatif qui dépend du contexte de l'appel.

Pourquoi je fais ainsi, car la méthode $clMail->AjouteUserListe doit préparer au préalable un objet que je passe dans cette fonction (InfosListesClub) dans mon exemple qui complète l'objet selon le contexte, et il y a plusieurs fonctions differentes selon le contexte et traitement.

Je vais essayer de passer en plus l’instance de la classe en paramètre ($this), un truc du genre :

class Gmodel
{
....
public function genereListeMailClubs(){
....
$clMail = new GmailingListsClass();
$clMail->AjouteUserListe($Lu, $nom_liste, $params, $this, 'InfosListesClub');
...
}
public function InfosListesClub(&$liste, $Lu, $clParam){
....}
}


pour ensuite dans ma méthode AjouteUserListe de l'instance $clMail pouvoir l'appeler via l'instance passée en paramètre
public function AjouteUserListe($Lu, $nom_liste, $clParam,$clAppel, $fctname_infos_liste){
...
// prétraitement

           if(method_exists($clAppel,$fctname_infos_liste)){
                $clAppel->{$fctname_infos_liste}($liste, $Lu, $clParam); 
               // appel de la méthode voulue de la classe appelante
            }
 
// post traitement
....
}



Peut-on faire + simple, et tout passer en un seul paramètre (instance de la classe appelante et le nom de la méthode à utiliser) ?

Merci.
0