|
|||||||
| Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP |
|
|
Publicité ' | |||||||||||||||||||||
|
|
|
Outils de la discussion |
|
|
#1 |
|
Membre régulier
![]() Inscription : avril 2003 Messages : 325 ![]() |
Bonjour,
Prenons un exemple : vous souhaitez retourner la liste des utilisateurs. Vous créez une méthode (static par exemple), dans une classe "User". Que retourner vous ? - un tableau, - une collection (d'objets), - le recordset directement issu de la requête. La collection semble vraiment être la solution la plus propre et maintenable, mais aussi la plus lourde. Pourquoi parcourir le recordset pour créer un tableau manuellement à retourner alors que le code qui va appeler la méthode va re-parcourir ce même tableau (donc 2 parcours) ? Comment vous y prenez-vous ? Pourquoi ? Merci |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 802 ![]() |
Pour ma part je stocke une collection d'objet et je libère la ressource SQL.
Pourquoi pas un tableau ? Parce que je trouve plus propre et plus personnalisable d'utiliser des objets. Pourquoi pas le recordset ? Parce que garder indéfiniment des tonnes de recordset en mémoire n'est pas franchement optimisé. |
|
|
00
|
|
|
#3 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Je récupère dans une collection qui fonctionne en lazy loading.
J'utilise ensuite un Iterator qui me permet de créer les objets sur demande, cela évite la charge inutile. De plus le fait d'utiliser un Iterator permet l'usage du LimitIterator qui est bien pratique pour la pagination.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : avril 2003 Messages : 325 ![]() |
Le problème du lazyload dans un parcours c'est qu'il va exécuter N requêtes pour récupérer l'objet.
OK pour l'objet y'a pas photo, mais les "new" sont très gourmands alors que l'on possède déjà toutes les données "à plat" dans le recordset ? |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Baptiste ROUSSELÉtudiant Inscription : janvier 2011 Messages : 802 ![]() |
Mais en cas de grosse requête le recordset est très lourd aussi, de plus cela peut gêner les prochaines requêtes si tu ne le libères pas.
|
|
|
00
|
|
|
#6 | |||||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Citation:
- une query réccupère les id et les passe à un RecordsetIterator en lui fournissant le nom de la classe à invoquer pour le fech. - la méthode current du RecordsetIterator génère les objets pour l'id courant. L'idée n'est bien sûr pas d'appliquer ce traitement sur de larges ensembles d'objets mais sur des sous-ensemble des 10 ou 20 éléments. Citation:
Voici à quoi ressemble le recordset (réduit à sa plus simple expression): Code :
Code :
Si j'ai le temps je fournirai un prototype pour le PDOStatementIterator évoqué plus haut.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||||||
|
00
|
|
|
#7 | ||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Voici à quoi pourrait bien ressembler notre StatementIterator.
Pour l'utiliser comme un factory d'objet, il est nécéssaire de définir le fetch-mode de PDOStatement avant d'instancier cette classe. Code :
Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||
|
00
|
Copyright © 2000-2012 - www.developpez.com