Par Valentin Brosseau / @c4software
Un site que vous savez déjà faire :
Mais écrit avec des classes.
Database : se connecter.Idea : le modèle de la table idees.Une classe, une responsabilité.
$pdo->query("SELECT * FROM idees")->fetchAll(PDO::FETCH_ASSOC);Question : quel est le format de ce que vous récupérez ?
['id' => 1, 'titre' => 'Un babyfoot', 'auteur' => 'Bart']Pratique, mais muet : $row['titer'] ne dira jamais rien.
foreach ($rows as $row) {
$ideas[] = new Idea($row['id'], $row['titre'], ...);
}Une ligne entre, un objet sort.
$idea->title : l'éditeur complète tout seul.$idea->titre : PHP vous prévient tout de suite.$idea->getShortContent() : l'objet rend service.La faute de frappe ne se cache plus.
Une classe par table, qui porte :
title, author, ...),Avant, dans la page :
$sql = "SELECT * FROM idees ORDER BY date_creation DESC";
$ideas = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);$ideas = Idea::all();La page affiche. Le modèle interroge. Personne ne fait les deux.
Idea::all() ou $idea->save() ?all(), find(), count() sont statiques : on n'a pas encore d'objet.save(), delete() ne le sont pas : elles agissent sur cet objet.Besoin d'un objet pour travailler ? Alors pas de static.
Chaque classe qui veut la base ouvre-t-elle la sienne ?
Database::getPdo();static : la connexion appartient à la classe.spl_autoload_register(function ($className) {
require_once('classes/' . $className . '.php');
});Vous utilisez une classe, PHP va chercher le fichier.
$_POST : ce que l'utilisateur a saisi.new Idea(null, ...) : un objet en mémoire.$idea->save() : une ligne en base.Pourquoi null comme id ? MySQL ne l'a pas encore attribué.
pages/home.php
-> Idea::all()
-> Database::getPdo()
-> MySQLEt le retour : des objets Idea, prêts à afficher.
static pour une connexion unique, l'autoloader pour les require.Place au TP 🚀