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

  FORUM HardWare.fr
  Programmation
  PHP

  php4 & les objets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

php4 & les objets

n°1200689
javelneko
Posté le 15-09-2005 à 20:09:31  profilanswer
 

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. ?>

mood
Publicité
Posté le 15-09-2005 à 20:09:31  profilanswer
 

n°1200894
Berceker U​nited
PSN : berceker_united
Posté le 16-09-2005 à 10:30:16  profilanswer
 

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.

n°1201171
javelneko
Posté le 16-09-2005 à 15:49:48  profilanswer
 

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. ?>

n°1201192
Berceker U​nited
PSN : berceker_united
Posté le 16-09-2005 à 16:10:55  profilanswer
 

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.


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

  php4 & les objets

 

Sujets relatifs
utilisation d'objets[PHP] Fonction analogue à substr_compare() en PHP4
Accès aux objets sous PostgreSQLSérialisation d'objets
Problème de session et objets .....Mise à jour de l'add-on php4 de WAMP5
[Résolu] [C#] Déclaration de tableaux d'objets à taille inconnueProbleme de référence sur des objets
[Vb express 2005] Insertion nouveau objetsde l'intérêt des objets...
Plus de sujets relatifs à : php4 & les objets


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)