Bonjour à tous,
Je me retrouve face à un problème de logique objet et j'espere que vous allez pouvoir m'aider.
J'utilise une couche d'abstraction de base de données composée par plusieurs classes. Une classe abstraite qui contient la définition des mes méthodes et des classes représentant plusieurs SGBD qui héritent de ma classe abstraite.
En gros j'ai :
abstract class dao
class mysql extends dao
class msql extends dao
class pgsql extends dao
J'instancie ensuite la classe enfant correspondante au SGBD que je souhaite utiliser et j'effectue mes requetes , ce qui donne dans le cas de l'utilisation de MySQL :
$bdd = new mysql();
$bdd->query('SELECT * FROM users;');
Je souhaiterai maintenant utiliser une classe pour stocker mes requêtes de cette façon :
class requete {
function SelectAll($table) {
$sql = 'SELECT * FROM '.$table;
return $bdd->query($sql);
}
Et donc voici mon problème : comment avoir accès à $bdd->query() qui correspond à une méthode de la classe d'abstraction ?
En utilisant $bdd->query() dans une fonction j'ai le message d'erreur suivant :
Fatal error: Call to a member function on a non-object in...
Je pourrais régler le probleme en déclarant la classe requete comme classe fille de mysql mais ça me forcerais d'instancier la classe requete plutôt que mysql et ça me ferais perdre la portabilité du code (il faudrai mettre à jours le fichier de classe pour changer le extends lors d'un changement de SGBD).
J'espere avoir bien exprimé mon problème et j'espere que vous pourrez m'eclairer !
Cordialement,