Bonjour à tous, j'essaye actuellement de creer une bete classe php qui doit gerer plusieurs SGBD. Pour cela, j'ai une architecture comme cela :
- Classe Database (Généraliste)
* Classe MySQL heritant de Database
* Classe PostgreSQL heritant de Database
...
Seul probleme, j'aurai aimer faire qu'il y ai le moins de chose possible à modifier lorsque l'on veux ajouter un sgbd.
Voici quelques variables dans ma classe Database :
$handle : Correspond à l'identifiant de la connexion à la bdd (apres un connect)
$sgbd : Contient le nom de la classe du SGBD utilité.
Au début, j'ai voulu faire ainsi :
$this->handle = $this->sgbd::connect($login, $password, $database);
Bien evidemment (et malheureusement pour moi), cela n'a pas fonctionné et j'ai eu le droit à ma premiere erreur php en hebreux
unexpected T_PAAMAYIM_NEKUDOTAYIM
J'ai donc cherché et trouver ceci :
$this->handle = call_user_func_array(array($this->sgbd, "connect"), array($host, $login, $password, $database));
Qui fonctionne tres bien pour appeler une methode (fonction) statique.
Probleme : Lorsque je veux executer une requete, il me retourne une erreur :
Using $this when not in object context
Correspondant à cette ligne : (methode non statique)
$this->last = call_user_func_array(array($this->sgbd, "query"), array($rqt, $this->handle));
Pour palier à ce probleme, j'aurai voulu instancer la classe du SGBD utilisé (MySQL par exemple).
Mais impossible d'utiliser l'une ou l'autre des methodes décrites au dessus. J'aurai voulu savoir si il y avait un autre moyen que le switch case... qui m'embetterai serieusement.
J'espere avoir été assez clair.
Merci d'avance,
Korko Fain
Partager