nom de classe variable

Le
Paul
Bonjour,

Je ne sais pas comment faire et gérer ceci dans un script php :

J'ai une classe A, une classe B qui extends A, et une classe C qui
extends A.
B et C font strictement la même chose mais d'une manière différente
chacune.

J'ai un fichier de config dans lequel je souhaiet paramétrer soit
l'utilisation de la classe B soit la C.
J'aimerai ensuite, que mon script instancie la classe selon la config
(soit B, soit C) et ensuite, qu'il appelle la méthode (qui porte le
même nom dans la classe B que dans la classe C).

Mon probleme est que je veux éviter d'avoir un switch en fonction de
la classe ; j'aimerai en gros mettre le nom de la classe en variable,
mais je ne pense pas que ce soit possible.

donc :
$config['use_classe'] = "C";
switch($config['use_classe'])
/*c'est ce switch que j'aimerai rendre plus "général" ; si un jour je
souhaite ajouter une troisième classe possible (D) qui ferai encore la
même chose que B ou C */
{
case "B" : $foo = new B(); break;
case "C" : $foo = new C(); break;
}
$foo->bar();

Pour être plus précis :
A : un gestionnaire de base de données
B : gestionnaire mysql
C : gestionnaire sqlite


Quel est la bonne méthode à employer pour faire ça ?
merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Tonio
Le #18835121
'lut !

QQc du genre :

abstract class A
{
abstract function bar();
}
(ou interface)

$foo = new $config['use_classe'];
$foo->bar();

devrais faire l'affaire.

Tonio
Tonio
Le #18840001
allez, même un peu plus propre:

if (class_exists($config['use_classe']))
{
$foo = new $config['use_classe'];
$foo->bar();
}
else
{
throw new Exception('Class not found!');
}
Paul
Le #18841931
> $foo = new $config['use_classe'];



ca fonctionne très bien tout simplement ; j'étais persuadé que ca
n'allait pas marcher...
merci !
slambert
Le #18932021
"Paul"
Pour être plus précis :
A : un gestionnaire de base de données
B : gestionnaire mysql
C : gestionnaire sqlite
... ...



Et un petit Design Pattern, plus précisement Factory, dans le cas présent,
ca donnerait quoi ?

Stef
Publicité
Poster une réponse
Anonyme