Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1270 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème de logique objet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de logique objet

n°1471557
gnarkk
Posté le 07-11-2006 à 12:36:05  profilanswer
 

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,

mood
Publicité
Posté le 07-11-2006 à 12:36:05  profilanswer
 

n°1471568
jbourdello​n
Posté le 07-11-2006 à 12:58:51  profilanswer
 

Pourquoi est -ce que tu ne remonte pas tes methodes génériques dans ton objet générique ....
 
Dao ?

n°1471570
gnarkk
Posté le 07-11-2006 à 13:07:15  profilanswer
 

En faite j'aimerai pouvoir séparer mes requetes de ma classe abstraite afin que ma classe abstraite ne garde que des méthodes necessaire à l'abstraction.
 
Le top serait d'avoir :
 
Ma classe abstraite
          |
          |
          |
Ma classe enfant (en fonction de mon SGBD)
 
Une classe requete parent (contenant des methodes permettant de faire des requetes de base genre select *)
          |
          |
          |
des classes requetes fille (contenant des methodes permettant de faire des requetes complex et instancié en fonction du besoin).
 
Le problème étant de permettre à ma classe requete enfant d'acceder à une méthode de la classe abstraite.
 
PS: pour dao le nom est mal choisi je sais car il porte à confusion mais j'ai mis ça pour l'exemple.

n°1471573
jbourdello​n
Posté le 07-11-2006 à 13:11:16  profilanswer
 

Je suis pas reelement d'accord , ton objet abstrait (dao) doit te permettre normalement :  
 
de te connecter / deconnecter à la base  
d'effectuer des requetes "libres"
et d'effectuer des requete "génériques" (comme ton select all)
 
Je vois pas comment faire mieux , vu que dedans tu vas avoir du sql et que le sql ne depend pas du sgbd
 
Moi j'avais deja fait la meme chose en java et ca marchait super bien  
 

n°1471576
gnarkk
Posté le 07-11-2006 à 13:18:27  profilanswer
 

mwai je suis ok avec toi sur le fond mais ça m'embette car je ne suis pas le seul à avoir accès à la classe abstraite et que je ne veux pas qu'on aille tripatouiller dedant.
 
Enfin c'est assé compliqué à expliquer. Si j'avais le choix c'est ce que je ferais mais la je peux pas trop.
 
Mais ça me parais vraiment bizzard qu'on ne puisse pas accèder à une methode d'une classe depuis une autre classe une fois que la 1ere à été instancié :/

n°1471579
jbourdello​n
Posté le 07-11-2006 à 13:25:13  profilanswer
 

ben le probleme c'est que ta classe requete ne connait pas la variable bdd , tu ne lui as pas transmis , je crois

n°1471582
gnarkk
Posté le 07-11-2006 à 13:30:08  profilanswer
 

j'ai oublié de le préciser mais je lui transmet via le constructeur.
 
class requete {
 
 var $object_name;
 
 function requete($object_name) {
 
  $bdd = $object_name;
 }
 
 function SelectAll($table) {
 
  $sql = 'SELECT *
   FROM '.$table.';';
   
  return $bdd->query($sql);
 }
}


Message édité par gnarkk le 07-11-2006 à 13:30:24
n°1471584
jbourdello​n
Posté le 07-11-2006 à 13:33:33  profilanswer
 

Citation :

class requete {  
 
 var $object_name;  
 
 function requete($object_name) {  
   
  $bdd = $object_name;  
 }  
 
 function SelectAll($table) {  
 
  $sql = 'SELECT *  
   FROM '.$table.';';  
   
  return $bdd->query($sql);  
 }  
}


 
Il y a un probleme dans ta classe tu déclares l'objet que tu passes en parametre ($object_name) mais pas l'objet bdd de la classe ?!? c'est normal ?
 
et de plus je crois que c'est un truc du genre $this->bdd->query->($sql) ... ou un truc dans le genre


Message édité par jbourdellon le 07-11-2006 à 13:33:59

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème de logique objet

 

Sujets relatifs
Probleme avec fonction left() en vbaprobleme upload certains types de fichiers (mp3, guitarpro)
Problème de syntaxe ???probléme de select sous FF
Question sur une manière de modéliser mon problèmeProbleme cookies
[xHtml/CSS]Petit probleme validateur W3Cprobleme mysql 5
Probleme envoi de mail PHPJavascript : Probleme de menu deroulant
Plus de sujets relatifs à : Problème de logique objet


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR