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 :
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
}
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
$maCollection = News::getTousLesArticles();
foreach($maCollection as $monArticle){
	$maCategorie = new Categorie($monArticle->getIdCategorie());
        echo $monArticle->getTitre().' - rubrique : '.$maRubrique->getLibelle();
}
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).

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.