Collections Objets, ResultSet - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Collections Objets, ResultSet

Par Vini -  2 reponses -  Le 13/04/2009 -  Flux RSS - 

Hello !

Bon je sais que je reviens souvent avec ma collection d'objets mais c'est un sujet un peu difficile à maitriser !

cert je pourrais utilisé un orm déjà fais mais le but pour moi

est de comprendre le mecanisme !

l'avantage avec PHP contrairement à JAVA que j'ai un peu toucher

c'est que tout est à faire ou presque lol 

je reviens car je voudrais mieux comprendre le rôle de la l'objet

ResultSet et l'implémentation de l'interface ArrayAccess car comme tu me l'as dis Emacs il faudrait que je fasse ma class ResultSet mais quand j'ai vu la taille de la class chez Java pour m'en inspirer j'ai eu peur ! mdrrr

bref je prend comme exemple ma class Comment que je fais actuellement !

bon j'ai pluis de problème pour les methode save, update, delete mais je galère à chaque fois pour

récupérer une table complète comme tous les comments dans une méthode du genre getAll()

ou getById() !

d'ailleurs j'ai vu que j'etais pas le seul à me posé la question :D

j'ai du mal à faire la liaison entre une collection d'objets Comments que j'extrait depuis MYSQLComments et l'objet Comment seul 

voilà si quelqu'un pouvais m'eclairer la dessus svp

merci Vini.

 

 

 

 

 

 

Réponses apportées à cette discussion

Par Vini -  Le 14/04/2009 - 

Re !

Bon je vais mes recherches à coté comme d'hab !

La SPL m'interesse beaucoup et je veux pouvoir la comprendre et l'utilisé au mieux de mes possiblitée !

 Emac je reviens donc avec ma classe Collection ou j'ai implémenté plusieurs interface !

d'après ce que j'ai compris de la l'interface ArrayAccess c'est que l'on peux rendre un tableau comme un objet !

 je penses aussi que je dois créer un la class ResultSet mais j'ai encore du mal à comprendre sont interet ? je penses en revenche qu'elle doit implementé l'interface Iterator puisque je vois souvent 

$rs->next();

je penses que sont but est de traiter la collection ? voici la class collection que j'ai fais peux tu me donner ton avis la dessus stp ?

 

Collection
  1. <?php
  2. require_once('interfaces/iCollection.class.php');
  3.  
  4. class Collection implements Iterator, iCollection, Countable, ArrayAccess
  5. {
  6.  
  7. private $collection = array();
  8.  
  9.  
  10. /**
  11.   * Ensures that this collection contains the
  12.   * specified element (optional operation).
  13.   *
  14.   * @access public
  15.   * @param Object $o
  16.   * @return void
  17.   *
  18.   */
  19. public function add($o)
  20. {
  21. $this->collection[] = $o;
  22. }
  23.  
  24.  
  25. /**
  26.   * Removes all of the elements from
  27.   * this collection (optional operation).
  28.   *
  29.   * @access public
  30.   * @return void
  31.   *
  32.   */
  33. public function clear()
  34. {
  35. $this->collection = array();
  36. }
  37.  
  38.  
  39. /**
  40.   * Returns true if this collection
  41.   * contains the specified element.
  42.   *
  43.   * @access public
  44.   * @return bool true | false
  45.   *
  46.   */
  47. public function contains($o)
  48. {
  49. if(in_array($this->collection, $o))
  50. {
  51. return true;
  52. }
  53. return false;
  54. }
  55.  
  56.  
  57. /**
  58.   * Compares the specified object with
  59.   * this collection for equality.
  60.   *
  61.   * @access public
  62.   * @param Object $o
  63.   * @return bool
  64.   *
  65.   */
  66. public function equals($o)
  67. {
  68. foreach($this->collection as $object)
  69. {
  70. if($object === $o)
  71. {
  72. return true;
  73. }
  74. return false;
  75. }
  76. }
  77.  
  78.  
  79. /**
  80.   * Returns true if this collection contains no elements.
  81.   *
  82.   * @access public
  83.   * @return mixed false | null
  84.   *
  85.   */
  86. public function isEmpty()
  87. {
  88. if($this->count() >= 0)
  89. {
  90. return false;
  91. }
  92. return null;
  93. }
  94.  
  95.  
  96. /**
  97.   * Removes a single instance of the specified
  98.   * element from this collection,
  99.   * if it is present (optional operation).
  100.   *
  101.   * @access public
  102.   * @return array $collection
  103.   *
  104.   */
  105. public function remove($o)
  106. {
  107. unset($this->collection[array_search($o, $this->collection)]);
  108. return array_shift($this->collection);
  109. }
  110.  
  111.  
  112. /**
  113.   * Returns the number of elements in this collection.
  114.   *
  115.   * @access public
  116.   * @return int $collection
  117.   *
  118.   */
  119. public function size()
  120. {
  121. return sizeof($this->collection);
  122. }
  123.  
  124.  
  125. /**
  126.   * Return the number total of the collection
  127.   *
  128.   * @access public
  129.   * @return int $collection
  130.   *
  131.   */
  132. public function count()
  133. {
  134. return count($this->collection);
  135. }
  136.  
  137.  
  138. /**
  139.   * Rewind the Iterator to the first element.
  140.   *
  141.   * @access public
  142.   *
  143.   */
  144. public function rewind()
  145. {
  146. reset($this->collection);
  147. }
  148.  
  149.  
  150. /**
  151.   * Move forward to next element.
  152.   *
  153.   * @access public
  154.   *
  155.   */
  156. public function next()
  157. {
  158. return next($this->collection);
  159. }
  160.  
  161.  
  162. /**
  163.   * Return the key of the current element.
  164.   *
  165.   * @access public
  166.   *
  167.   */
  168. public function key()
  169. {
  170. return key($this->collection);
  171. }
  172.  
  173.  
  174. /**
  175.   * Return the current element.
  176.   *
  177.   * @access public
  178.   *
  179.   */
  180. public function current()
  181. {
  182. return current($this->collection);
  183. }
  184.  
  185.  
  186. /**
  187.   * check is there is a current element after call to rewind() or next().
  188.   *
  189.   * @access public
  190.   *
  191.   */
  192. public function valid()
  193. {
  194. return ($this->current() < count($this->collection));
  195. }
  196.  
  197.  
  198. /**
  199.   *
  200.   * @param $offset
  201.   * @return unknown_type
  202.   */
  203. public function OffsetExists($offset)
  204. {
  205. return isset($this->collection[$offset]);
  206. }
  207.  
  208.  
  209. /**
  210.   *
  211.   * @access public
  212.   * @param $offset
  213.   * @return unknown_type
  214.   *
  215.   */
  216. public function offsetSet($offset, $value)
  217. {
  218. return $this->collection[$offset] = $value ;
  219. }
  220.  
  221.  
  222. /**
  223.   *
  224.   * @access public
  225.   * @param $offset
  226.   * @param $value
  227.   * @return unknown_type
  228.   *
  229.   */
  230. public function offsetGet($offset)
  231. {
  232. return $this->collection[$offset];
  233. }
  234.  
  235.  
  236. /**
  237.   *
  238.   * @access public
  239.   * @param int $offset
  240.   * @return void
  241.   *
  242.   */
  243. public function offsetUnset($offset)
  244. {
  245. unset($this->collection[$offset]);
  246. }
  247.  
  248. } /*** End class ***/
  249. ?>

voila je vais avancer par étape jusqu'a j'arrive à faire une Collection correct même si au debut elle n'est pas encore super optimisé ! mais faut bien commencer quelque part !

d'ailleurs j'ai encore du mal à saisir le concept du hydrate !  mais bon je vais me prendre la tete à fin de mieux le comprendre!

 

merci [^-^]

 

 

 
Par damien -  Le 02/07/2009 - 

Pour information, j'ai trouvé récemment un autre tutoriel sur un blog qui montrait un exemple de classe "Collection" implémentant un iterateur, ça sert de complément au tutoriel déjà présent sur le site.

 

L'url est la suivante : http://www.zen-in-progress.com/classe-php-conteneur-dobjet/

 

 

Ajouter une réponse à la discussion

Seuls les membres loggués sont autorisés à poster dans les forums !