Fork me on GitHub






Classe
Team FrXoops
Inscrit: 14/05/2004 22:32
Messages: 2554
Bonjour:
Y a t-il un moyen en PHP d'instancier une classe sans connaitre son nom a l'avance.
Je réalise un module de news avec un systeme de plugin basé sur des classes qui auront un même prototype.
pour l'instant je crée dynamiquement un fichier "selecteur.php" dans lequel je met un switch et qui me renvoi mon objet, du genre:
-----------------------
switch (nom){
case toto: $ob = new clsToto;
case titi: $ob = new clsTiti;
...
}
return $ob;
------------------------
Mais c'est un fichier qui est créer et inclus dinamiquement au moement de la lecture des plugins.

j'aurais préféré un truc du genre "call_user_func" mais pour les classe, car je crois que la technique que j'utilise risque de ne pas passer chez certains hébergeurs.

Posté le : 16/08/2007 09:45
Partager Twitter Partagez cette article sur GG+
Re: Classe
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
tu peux instancier une classe grace a son nom sans aucun pb en php.

Par exemple dans ton cas tu as $nom qui peut avoir toto ou titi, et tes classes sont clsToto clsTiti.

$classe 'cls'.ucfirst($nom);
$ob = new $classe();


Attention ca marche nickel en Php5 et a priori je vois pas pourquoi ca marcherait pas en php4 (peut etre un & a rajouter en php4 mais j'en suis meme pas sur)

Posté le : 16/08/2007 12:18
Partager Twitter Partagez cette article sur GG+
Re: Classe
Xoops accro
Inscrit: 25/02/2004 00:20
De Région parisienne
Messages: 2526
avec la méthode proposé par garrath, tu dois pouvoir aussi utiliser :
call_user_func
et/ou
call_user_func_array

Posté le : 16/08/2007 13:05
Partager Twitter Partagez cette article sur GG+
Re: Classe
Team FrXoops
Inscrit: 14/05/2004 22:32
Messages: 2554
Trop for PHP, ça me semblait tellement triviale que je n'ai même pas essayer, et ça marche nikel.
Merci.

Posté le : 16/08/2007 13:55
Partager Twitter Partagez cette article sur GG+
Re: Classe
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
y a meme mieux tu peux tres bien faire appel de cette façon a une fonction ou a une methode d'un objet (ou classe). Le call_user_func ne me parait pas utile ...

tu peux tres bien faire :
$nom 'ma_fonction';
$toto $nom($param1$param2);

ou pour une methode
$nom 'ma_methode';
$obj = new clsToto();

$obj->$nom($param);

L'avantage par rapport a call_user_func c'est que les parametres peuvent etre passes par reference.

Ca c'est tres utile pour creer un controleur ou eliminer tout un paquet de code qu'on voit trop souvent dans les index.php...

Posté le : 16/08/2007 19:17
Partager Twitter Partagez cette article sur GG+
Re: Classe
Team FrXoops
Inscrit: 14/05/2004 22:32
Messages: 2554
Effectivement ça ouvre des horizons très interressant que je n'ai pas encore exploité en PHP.
Bine utilisé ça doit permettre effectivement des choses interressantes.
par contre il doit falloir normaliser les noms pour ce faire.
En tout cas pour faire mon système de plugin c'est impec.
Par contre maintenant je galère avec les dates, mais ce sera un autre post si je ne m'en sors pas.

Posté le : 16/08/2007 21:40
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

26 Personne(s) en ligne (21 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 26 | Plus ...