php4 & les objets

php4 & les objets - PHP - Programmation

Marsh Posté le 15-09-2005 à 20:09:31    

salut,
j'ai comme objectif de recoder un projet existant en m'appliquant plus sur le code et en utilisant beaucoups plus les objets. Cependant, je n'arrive pas encore à bien définir la structure de mes objets et c'est là que j'ai besoin de votre aide :) J'ai commencé avec le code ci-dessous, mais je n'arrive pas bien a me rendre compte si j'ai bien découpé mon code, comment communiquer entre plusieurs classes, bref, si vous avec le moindre commentaire / conseil n'hesitez pas !!!
 
ps : Pour vous faire une idée, mon projet pas super bien codé est visible sur http://albums.lichat.net
 

Code :
  1. <?php
  2. /**
  3. * L'Album est l'élément principal de ce projet
  4. * et est constitué d'Events.
  5. */
  6. class Album {
  7. var $config;
  8. var $events;
  9. function Album(){
  10.  GLOBAL $cfg;
  11.  $this->config = $cfg;
  12. }
  13. // Permet d'obtenir la liste des évènements
  14. function load_events(){
  15.  $sql = 'SELECT idevent FROM events WHERE publier = "oui"';
  16.  $query = mysql_query($sql, $this->config['SQLConnection']);
  17.  while ($row = mysql_fetch_array($query)){
  18.   $this->events[] = Events::load_event($row['idevent']);
  19.  }
  20. }
  21. }
  22. /**
  23. * Les Events font partie de l'album et sont constitués de photos
  24. *
  25. */
  26. class Events extends Album {
  27. var $idevent;
  28. var $label;
  29. var $description;
  30. var $date;
  31. // Récupère les infos d'un évènement
  32. function load_event($idevent){
  33.  $sql = 'SELECT * FROM events WHERE idevent = '.$idevent;
  34.  $query = mysql_query($sql, $this->config['SQLConnection']);
  35.  $row = mysql_fetch_array($query);
  36.  $this->idevent = $row['idevent'];
  37.  $this->label = $row['label'];
  38.  $this->date = $row['date'];
  39.  $this->description = $row['description'];
  40. }
  41. }
  42. /**
  43. * Les Photos font partie d'un Event
  44. *
  45. */
  46. class Photos extends Events {
  47. var $idphoto;
  48. var $idevent;
  49. var $label;
  50. var $description;
  51. var $date;
  52. // Récupère les infos d'une image
  53. function load_photo($idphoto){
  54.  $sql = 'SELECT * FROM photos WHERE idphoto = '.$idphoto;
  55.  $query = mysql_query($sql, $this->config['SQLConnection']);
  56.  $row = mysql_fetch_array($query);
  57.  $this->idphoto = $row['idphoto'];
  58.  $this->idevent = $row['idevent'];
  59.  $this->label = $row['label'];
  60.  $this->date = $row['date'];
  61.  $this->description = $row['description'];
  62. }
  63. }
  64. ?>

Reply

Marsh Posté le 15-09-2005 à 20:09:31   

Reply

Marsh Posté le 16-09-2005 à 10:30:16    

Je crois que tu t'es trompé sur la structure.
Tu dis que l'album sera constitué d'event mais dans la class event tu fais un extends. Pour t'aider un peut a structurer il y a deux memotechnique à connaitre. [A des] et [Est un]
[A des] : notion de message entre classe. Pour ton cas : L'album [A des] event.
[Est un] : notion d'héritage entre classe. Par exemple : un répertoire [Est un] fichier d'un type particulier. Donc tu as un class Repertoire qui hérite de la class fichier. Pour ton cas il y a pas lieu de faire des heritages.
 
Pour revenir a ton cas je résumerais ainsi?
Ton album a des even et les even ont des images.
Donc trois classes comme actuellement.
Album : Quand tu fais un loadEven tu dois instancier la class Even et charger les propriétés issus de la base dans la class Even et eventuellement executer une methode de la classe even qui va elle faire la meme chose mais pour les images. En gros depuis la classe Album il va avoir une cascade d'evenement.

Reply

Marsh Posté le 16-09-2005 à 15:49:48    

Merci pour cette réponse,
j'ai révisé ma copie en enlevant les "extend" et je suis arrivé a la structure ci-dessous.
 
Je peux donc a partir de l'album, connaitre les "events" puis le détail d'un "event" puis les photos de l'event et enfin le detail d'une photo ( Album > Events > Event > Photos > Photo)
 
Cependant, comment faire pour faire le chemin inverse *le plus proprement possible* (Photo > Event > Album) ? Dans l'objet Photo je connais le idevent a utiliser pour creer un nouvel objet "Event" mais je ne vois pas comment aggreger les infos de l'event dans l'objet photo.
 

Code :
  1. <?php
  2. require_once('config.inc.php');
  3. /**
  4. * L'Album est l'élément principal de ce projet
  5. * et est constitué d'Events.
  6. */
  7. class Album {
  8.      var $config;
  9.      var $events;
  10.    
  11.      function Album(){
  12.          GLOBAL $cfg;
  13.          $this->config = $cfg;
  14.      }
  15.    
  16.      // Permet d'obtenir la liste des évènements
  17.      function load_events(){
  18.          $sql = 'SELECT idevent FROM events WHERE publier = "oui"';
  19.          $query = mysql_query($sql, $this->config['SQLConnection']);
  20.          for ($i=0 ; $row = mysql_fetch_array($query) ; $i++){
  21.           $this->events[$i] = new Events();
  22.           $this->events[$i]->load_event($row['idevent']);
  23.          }
  24.      }
  25. }
  26. /**
  27. * Les Events font partie de l'album et sont constitués de photos
  28. *
  29. */
  30. class Events{
  31.     var $config;
  32.     var $idevent;
  33.     var $label;
  34.     var $description;
  35.     var $date;
  36.     var $photos;
  37.     function Events(){
  38.         GLOBAL $cfg;
  39.         $this->config = $cfg;
  40.     }
  41.    
  42.     // Récupère les infos d'un évènement
  43.     function load_event($idevent){
  44.         $sql = 'SELECT * FROM events WHERE idevent = '.$idevent;
  45.         $query = mysql_query($sql, $this->config['SQLConnection']);
  46.         $row = mysql_fetch_array($query);
  47.         $this->idevent = $row['idevent'];
  48.         $this->label = $row['label'];
  49.         $this->date = $row['date'];
  50.         $this->description = $row['description'];
  51.     }
  52.    
  53.     // Récupere les photos de l'evenement
  54.     function load_event_photos(){
  55.         $sql = 'SELECT idphoto FROM photos WHERE idevent = '.$this->idevent;
  56.         $query = mysql_query($sql, $this->config['SQLConnection']);
  57.         for ($i=0 ; $row = mysql_fetch_array($query) ; $i++){
  58.          $this->photos[$i] = new Photos();
  59.          $this->photos[$i]->load_photo($row['idphoto']);
  60.         }
  61.     }
  62. }
  63. /**
  64. * Les Photos font partie d'un Event
  65. *
  66. */
  67. class Photos{
  68.     var $idphoto;
  69.     var $idevent;
  70.     var $label;
  71. var $image_vignette;
  72.     var $image_zoom;
  73.     function Photos(){
  74.         GLOBAL $cfg;
  75.         $this->config = $cfg;
  76.     }
  77.    
  78.     // Récupère les infos d'une image
  79.     function load_photo($idphoto){
  80.         $sql = 'SELECT * FROM photos WHERE idphoto = '.$idphoto;
  81.         $query = mysql_query($sql, $this->config['SQLConnection']);
  82.         $row = mysql_fetch_array($query);
  83.         $this->idphoto = $row['idphoto'];
  84.         $this->idevent = $row['idevent'];
  85.         $this->label = $row['label'];
  86.         $this->image_vignette = $row['image_vignette'];
  87.  $this->image_zoom = $row['image_zoom'];
  88.         $this->datetime = $row['datetime'];
  89.     }
  90. }
  91. /*  
  92. $al = new Album();
  93. $al->load_events();
  94. echo '<pre>';
  95. print_r($al->events);
  96. echo '</pre>';
  97. */
  98. /*
  99. $ev = new Events();
  100. $ev->load_event(50);
  101. $ev->load_event_photos();
  102. echo '<pre>';
  103. print_r($ev->photos);
  104. echo '</pre>';
  105. */
  106. $ph = new Photos();
  107. $ph->load_photo(254);
  108. echo '<pre>';
  109. echo $ph->label;
  110. echo '</pre>';
  111. ?>

Reply

Marsh Posté le 16-09-2005 à 16:10:55    

A chaque fois que tu encapsule un autre objet tu lui fais passer ton objet en gros si tu es dans l'objet album tu fais  $objEvent =  new Event($this);  
Ainsi dans l'objet Event il y aura toute les méthodes et propriétés de l'objet Album. tu fais pareille pour event avec l'image. Image va bénéficier de l'obet event ainsi que l'objet parent.  
Ainsi tu peux monter et descendre. Tes objets communique tranquille.

Reply

Sujets relatifs:

Leave a Replay

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