Bonjour,
J'ai eu l'occasion d'intervenir, pendant un stage, sur une application existante en PHP associant POO et base de données.
En gros (en simplifiant), on a une classe par table, chaque classe représentant une table. Par exemple, on a les tables News(id_news, titre, contenu, #id_categorie) et Categorie(id_categorie, libelle).
On se retrouve donc avec des classes de ce type :
A côté, on a notre page afficher_articles.php, avec un truc du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class News{ private $id_news; private $titre; private $contenu; private $id_categorie; // méthodes habituelles public static function getTousLesArticles() // fait une requête dans la base de données, // récupère tous les articles // instancie chaque objet, le stocke dans un tableau // retourne une collection d'articles (=tableau) } class Categorie{ private $id_categorie; private $libelle; // méthodes habituelles // le constructeur prend en paramètre l'id de la catégorie et renseigne les attributs à partir d'une requête sql }
Ce qui me choque : le nombre de requêtes qui seront effectuées dans notre fichier "afficher_articles.php" : on aura, en effet, nbArticles*1 requête pour récupérer les catégories de chaque article ! Et encore, mon cas est simplifié, car dans ce que j'ai pu voir, on avait parfois l'instanciation de bien plus d'objets (dans cet exemple, on avait par exemple l'instanciation de l'auteur... soit x requêtes de plus).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $maCollection = News::getTousLesArticles(); foreach($maCollection as $monArticle){ $maCategorie = new Categorie($monArticle->getIdCategorie()); echo $monArticle->getTitre().' - rubrique : '.$maRubrique->getLibelle(); }
En procédural, on se serait contenté d'une seule requête avec jointure...
Comment procédez-vous sur des cas comme ça ?
Bonne soirée.








Répondre avec citation
Partager