Poo et php

Poo et php - PHP - Programmation

Marsh Posté le 04-03-2005 à 21:11:52    

BOnjour,  
 
je suis en train de développer une petite application en php et j'essaie tant bien que mal de la programmer en orienter objet.
Par contre mes notion de poo sont assez limitée, donc je voudrais si possible que qqun me guide sur ceci :  
 
En fait j'ai dans une base de données postgres, une table horaires qui se présente comme ceci :  
 

Code :
  1. id_horaire
  2. id_salle          // La salle associee
  3. id_jour           // Le jour  
  4. id_employe        // Professeur donnant cours
  5. id_discipline     // le cours associé
  6. heure_deb         // L'heure de début
  7. heure_fin         // L'heure de fin


 
Dans cette table un enregistrement est en fait une heure dedébut a une heure de fin, par exemple :  
 
- de 18H00 à 19H30, l'employe n°13 donnera cours dans la salle n°2 le jour de la semaine n°3 le cours n°6
 
et sur base de tout les enregistrement de cette table, on etablis une grille horaire.
 
Maintenant ce que je ne suis pas trop sur c'est comment m'y prendre coté php avec les classes.
 
J'ai bien fait ceci :  
 

Code :
  1. class clsHoraire {
  2.  var $id;
  3.  var $salle_assoc;
  4.  var $jour_assoc;
  5.  var $employe_assoc;
  6.  var $cours_assoc;
  7.  var $heure_deb;
  8.  var $heure_fin;
  9.  // Constructeur
  10.  function clsHoraire($arg) {
  11.   global $db_link;
  12.   if(is_array($arg)) {
  13.    $this->id=$arg['id_horaire'];
  14.    $this->salle_assoc   = new clsSalle($arg);
  15.    $this->jour_assoc    = new clsJour($arg);
  16.    $this->employe_assoc = new clsEmploye($arg);
  17.    $this->cours_assoc   = new clsCours($arg);
  18.    $this->heure_deb=$arg['heure_deb'];
  19.    $this->heure_fin=$arg['heure_fin'];
  20.   }
  21.   else {
  22.    $rs_horaires=sql_select($db_link, "
  23.     SELECT * FROM horaire_semaine
  24.     WHERE id_horaire='".$arg."'
  25.    " );
  26.    $this->clsHoraire($rs_horaires[0]);
  27.   }
  28.  }
  29. }


 
(Deja n'hesitez pas a critiquer si ca vous parrait louche... ca m'aidera.)
 
Ma question est : Comment faire pour rester dans l'esprit poo, pour avoir une fonction, qui affiche la grille horaire?
 
Dois je implementer une fonction AffHoraire dans cette classe meme ?  
Ou alors il faut creer une classe "père" intitulée Horaires, et la classe ci-dessus alors ne serait pas nommée correctement, je devrais l'appeler plutot HeuresHoraire ?
 
voila je suis un peu perdu, si qqun pourrais me montrer un ptit exemple concret pour m'orienter en prenant comme point de départ cette classe, ca serait cool, car j'ai un peu de mal :(
 
J'espere que tout est clair, si besoin de precision sur un truc dite le moi.
 
Merci davance tout le monde
 
P.S.: pour la categorie j'ai mis "php" faute de categorie "poo", si il est preferable de mettre "Divers" pour être mieux ciblé dite le moi merci :)


Message édité par Gat$ le 04-03-2005 à 21:14:48
Reply

Marsh Posté le 04-03-2005 à 21:11:52   

Reply

Marsh Posté le 04-03-2005 à 22:36:29    

clsHoraire ne corespond qu'a une seule réservation et donc qu'a un seul horaire.
Pour afficher une grille horaire compléte, il te faudrait par exemple une classe "clsGrilleHoraire" contenant un tableau d'objets de type "clsHoraire".

Reply

Marsh Posté le 05-03-2005 à 00:43:24    

omega2 a écrit :

clsHoraire ne corespond qu'a une seule réservation et donc qu'a un seul horaire.
Pour afficher une grille horaire compléte, il te faudrait par exemple une classe "clsGrilleHoraire" contenant un tableau d'objets de type "clsHoraire".


 
Merci pour ta réponse!
 
J'ai fait comme ceci :  
 

Code :
  1. <?php
  2. class clsGrilleHoraire {
  3.  var $Grille;
  4.  // Constructeur
  5.  function clsGrilleHoraire() {
  6.   global $db_link;
  7.   $rs_horaires=sql_select($db_link, "SELECT * FROM horaire_semaine" );
  8.   for($i=0; $i<count($rs_horaires); $i++) {
  9.    $this->Grille[$i] = new clsHoraire($rs_horaires[$i]);
  10.   }
  11.  }
  12. }
  13. class clsHoraire {
  14.  var $id;
  15.  var $salle_assoc;
  16.  var $jour_assoc;
  17.  var $employe_assoc;
  18.  var $cours_assoc;
  19.  var $louee;
  20.  var $heure_deb;
  21.  var $heure_fin;
  22.  // Constructeur
  23.  function clsHoraire($arg) {
  24.   global $db_link;
  25.   if(is_array($arg)) {
  26.    $this->id=$arg['id_horaire'];
  27.    $this->salle_assoc   = new clsSalle($arg);
  28.    $this->jour_assoc    = new clsJour($arg);
  29.    $this->employe_assoc = new clsEmploye($arg);
  30.    $this->cours_assoc   = new clsCours($arg);
  31.    $this->louee=$arg['louee'];
  32.    $this->heure_deb=$arg['heure_deb'];
  33.    $this->heure_fin=$arg['heure_fin'];
  34.   }
  35.   else {
  36.    $rs_horaires=sql_select($db_link, "
  37.     SELECT * FROM horaire_semaine
  38.     WHERE id_horaire='".$arg."'
  39.    " );
  40.    $this->clsHoraire($rs_horaires[0]);
  41.   }
  42.  }
  43. }
  44. ?>


 
Ca te parrait correct ?  
 
J'ai pas mis  
 

Code :
  1. class clsHoraire extends clsGrilleHoraire { ... }


 
Car en fait je vois pas trop a quoi pourrait servir un heritage dans ce cas ci, dis moi si je me trompe. :)
 
Merci


Message édité par Gat$ le 05-03-2005 à 00:43:54
Reply

Marsh Posté le 05-03-2005 à 15:15:22    

Voilà, t'as pigé le principe. En effet, l'héritage ne peut pas servir dans ce cas ci.
Il te reste plus qu'à rajouter les fonctions pour utiliser les données. :)
 
Au fait, pour rendre ton sctript plus rapide, tu pourais éviter de rechercher à nouveau les données dans la base de donnée vu que la premiére classe les a déjà reçu. ;)

Reply

Marsh Posté le 05-03-2005 à 15:26:05    

Ok c cool merci si j'ai d'autre prob je ferai un reply ici, merci pour ton aide :)
 

omega2 a écrit :


Au fait, pour rendre ton sctript plus rapide, tu pourais éviter de rechercher à nouveau les données dans la base de donnée vu que la premiére classe les a déjà reçu. ;)


 
Ben en fait quand je recois un tableau en argument c'est en fait un resultat de requete et donc la fct sait qu'elle ne doit pas interroger la db, par contre si ce n'est pas un tableau c'est que c'est un identificateur, et donc il faut aller chercher les données dans la DB, j'ai fait gaffe a paas faire 2 fois la meme chose :)
 
 

Reply

Marsh Posté le 05-03-2005 à 15:46:05    

ha oui, j'avais pas vu. :)
Fait attention avec les fonctions récursives, le jour ou ca se passe pas bien, ca risque de tourner en boucle et là t'auras dfroit à un message d'erreur pas forcément facile à comprendre.
Dans le cas présent, il vaudrait mieux se dire : si on me passe que l'identifiant, je cherche les données et je les mets dans une variable tableau mais si on me passe tout, je le copie dans l'autre variable tableau. ;) Et si t'as besoin de faires d'autres opérations derriéres, tu ne risqueras pas de les faire plusieurs fois. :)

Reply

Marsh Posté le 05-03-2005 à 15:54:42    

omega2 a écrit :

ha oui, j'avais pas vu. :)
Fait attention avec les fonctions récursives, le jour ou ca se passe pas bien, ca risque de tourner en boucle et là t'auras dfroit à un message d'erreur pas forcément facile à comprendre.


 
Oui d'ailleur c'est arrivé, et explorer met "impossible d'afficher la page" quand ca boucle a l'infini  :whistle:
 

omega2 a écrit :


Dans le cas présent, il vaudrait mieux se dire : si on me passe que l'identifiant, je cherche les données et je les mets dans une variable tableau mais si on me passe tout, je le copie dans l'autre variable tableau.


 
Moui, j'etais si content d'avoir trouvé un truc qui marchait bien, avec un minimum de code :o  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed