Tp 4 php classes models blogpoo
Thème :
Junior
1 vues ·3/9 leçons

01 - Introduction aux Classes (De l’absurde au concret)

Ce document explique pourquoi nous abandonnons les tableaux (array) et les fonctions pour passer aux Classes et aux Objets en PHP 8.4.


1. L’absurde : Le problème des Tableaux (Arrays)

Jusqu’à la Branche 3, nos fonctions renvoyaient des tableaux associatifs :

$article = findArticle(5);
// $article = ['id' => 5, 'title' => 'Mon titre', 'content' => 'Texte...'];

Où est le problème ?

  1. Zéro sécurité : Si vous tapez $article['titre'] au lieu de $article['title'], PHP ne dira rien (ou juste un Warning), et la valeur sera vide. Le bug peut passer inaperçu jusqu’en production.
  2. Zéro typage : Rien ne garantit que $article['id'] est un entier. C’est peut-être la chaîne "5".
  3. L’autocomplétion est morte : Votre éditeur (VSCode, PhpStorm) n’a aucune idée de ce que contient $article. Vous devez ouvrir la base de données pour vous souvenir des noms de colonnes.

La solution concrète : Les Propriétés Typées Avec une classe, tout est strict :

class Article {
    public int $id;
    public string $title;
}

$article = Article::find(5);
echo $article->title; // ✅ Autocomplétion OK
echo $article->titre; // ❌ PHP lance une FATAL ERROR immédiate ! Le bug est bloqué.

2. L’absurde : Créer un objet vide pour agir sur le groupe

Une erreur très classique quand on débute en POO est de vouloir créer un objet (“instancier”) pour tout et n’importe quoi :

L’approche absurde :

// Je veux savoir combien j'ai d'articles dans mon blog.
$articleFantome = new Article(); // Je crée un faux article vide en mémoire...
$total = $articleFantome->countAll(); // ...pour compter les vrais articles.

C’est absurde ! Un objet Article représente une seule ligne précise dans votre base de données (ex: L’article “Bienvenue”). Un article précis n’a pas à savoir combien d’autres articles existent.

La solution concrète : Les Méthodes Statiques Les méthodes statiques appartiennent à la “Maison” (la Classe), pas aux “Habitants” (les Objets).

// On s'adresse au "concept" d'Article en général (la table)
$total = Article::count();

// On s'adresse à la "Maison" pour trouver un habitant précis
$article5 = Article::find(5);

3. L’absurde : L’anémie comportementale (Le syndrome du contrôleur obèse)

Dans un code procédural classique, le fichier login.php (le contrôleur) fait tout le travail :

// (Code procédural)
$user = findUserByEmail($email);
if (password_verify($password, $user['password'])) {
    $_SESSION['role'] = $user['role'];
}

C’est le contrôleur qui manipule les données de l’utilisateur. L’utilisateur est “passif”, c’est juste un bout de données (un tableau).

La solution concrète : Le principe “Tell, don’t ask” (Dis-lui, ne demande pas) En POO, un objet est “intelligent”. On ne lui arrache pas ses données pour les traiter ailleurs, on lui demande d’agir.

// (Code Objet)
$user = User::findByEmail($email);

if ($user->verifyPassword($password)) { // ✅ L'utilisateur vérifie lui-même !
    $user->toSession();                 // ✅ L'utilisateur s'enregistre lui-même !
}

Le code devient lisible comme un livre : “Si l’utilisateur vérifie son mot de passe, l’utilisateur va en session”. C’est l’essence même de l’Encapsulation.

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur 01 - Introduction aux Classes (De l'absurde au concret). Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.